Autenticación
IVGraph utiliza dos métodos de autenticación: tokens JWT (para usuarios de la web mediante OAuth de Notion) y tokens de servicio (para agentes LLM y automatización).
OAuth de Notion (JWT)
IVGraph autentica a los usuarios mediante el flujo OAuth2 de Notion. No hay registro con nombre de usuario y contraseña.
Flujo
User clicks "Sign in with Notion"
|
v
GET /api/integrations/auth/notion/
| -> Redirects to Notion consent screen
v
User authorizes IVGraph in Notion
|
v
Notion redirects to /api/integrations/auth/notion/callback?code=...
| -> Backend exchanges code for Notion token
| -> Creates/updates Django user
| -> Issues JWT tokens
v
Redirect to dashboard with tokens in URL fragment
Tokens JWT
| Token | Vigencia | Finalidad |
|---|---|---|
| Token de acceso | 4 horas | Autenticación en la API |
| Token de renovación | 7 días | Obtener un nuevo token de acceso |
Uso del token de acceso:
curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." \
"https://ivgraph.com/api/notion-graph/"
Renovación de un token caducado:
curl -X POST "https://ivgraph.com/api/auth/refresh/" \
-H "Content-Type: application/json" \
-d '{"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."}'
Respuesta:
{"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."}
Cierre de sesión (inclusión del token de renovación en la lista de bloqueo):
curl -X POST "https://ivgraph.com/api/auth/logout/" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{"refresh": "<refresh_token>"}'
Puntos de conexión de autenticación
| Método | Punto de conexión | Descripción |
|---|---|---|
| GET | /api/integrations/auth/notion/ |
Iniciar el flujo OAuth de Notion |
| GET | /api/integrations/auth/notion/callback |
Devolución de llamada de OAuth (interna) |
| GET | /api/integrations/auth/notion/status |
Consultar el estado de OAuth |
| POST | /api/auth/refresh/ |
Renovar el token de acceso |
| POST | /api/auth/logout/ |
Incluir el token de renovación en la lista de bloqueo |
| GET | /api/auth/validate/ |
Comprobar si el token es válido |
| GET | /api/auth/me/ |
Obtener información del usuario actual |
Tokens de servicio (para agentes LLM)
Los tokens de servicio proporcionan acceso de larga duración, con permisos delimitados, a la API V1 de solo lectura. Están diseñados para agentes LLM, scripts de automatización y canalizaciones de CI/CD.
Formato del token
- Prefijo:
ivg_(p. ej.,ivg_a1b2c3d4e5f6...) - Longitud: 32 caracteres aleatorios después del prefijo
- Almacenamiento: solo se guarda el hash SHA-256 en la base de datos; el token original se muestra una sola vez al crearlo
Crear un token
Mediante la API (requiere autenticación JWT):
curl -X POST "https://ivgraph.com/api/tokens/" \
-H "Authorization: Bearer <jwt_access_token>" \
-H "Content-Type: application/json" \
-d '{
"name": "My LLM Agent",
"scopes": ["graph:search", "graph:read", "graph:neighbors"],
"workspace_ids": ["your-workspace-uuid"],
"expires_in_days": 90
}'
Respuesta (¡el token se muestra una sola vez!):
{
"id": 1,
"name": "My LLM Agent",
"token": "ivg_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"prefix": "ivg_a1b2c3",
"scopes": ["graph:search", "graph:read", "graph:neighbors"],
"workspace_ids": ["your-workspace-uuid"],
"is_active": true,
"created_at": "2026-04-10T12:00:00Z",
"expires_at": "2026-07-09T12:00:00Z"
}
Ámbitos de permisos
| Ámbito | Permite |
|---|---|
graph:search |
Buscar nodos por título |
graph:read |
Leer los detalles de los nodos y el contenido de las páginas |
graph:neighbors |
Obtener nodos vecinos y recorrer rutas |
Límites
- Máximo de 10 tokens por usuario
- Cada token debe tener al menos un ámbito de permisos
- Cada token debe tener al menos un workspace_id (acceso denegado de forma predeterminada)
- Caducidad opcional (
expires_in_days): omite este parámetro para que el token no caduque
Gestión de tokens
| Método | Punto de conexión | Descripción |
|---|---|---|
| GET | /api/tokens/ |
Listar tus tokens (sin sus valores originales) |
| POST | /api/tokens/ |
Crear un nuevo token |
| DELETE | /api/tokens/<id>/ |
Revocar un token (de forma permanente) |