Skip to Content

Gestión de Sesiones

Auris gestiona las sesiones de usuario a través de una combinación de tokens OAuth2 (tokens de acceso y tokens de refresco) y registros de sesión en el servidor. Esta guía explica el ciclo de vida de las sesiones, cómo configurar las políticas de sesión, cómo funciona la rotación de tokens y cómo revocar sesiones de forma programática.

Ciclo de Vida de la Sesión

Cuando un usuario se autentica a través del flujo de inicio de sesión alojado, Auris crea lo siguiente:

  1. Sesión OAuth — Un registro en el servidor que rastrea el estado de autenticación, almacenado con una cookie httpOnly en el dominio del inicio de sesión alojado. Esta sesión tiene un TTL de 30 minutos y se usa únicamente durante el propio flujo de inicio de sesión.

  2. Token de Acceso — Un JWT de corta duración (por defecto: 60 minutos) devuelto a tu aplicación. Se usa como token Bearer para autenticar solicitudes a la API.

  3. Token de Refresco — Un token opaco de larga duración (por defecto: 30 días) usado para obtener nuevos tokens de acceso sin requerir que el usuario inicie sesión de nuevo.

  4. Sesión de Login — Un registro en el servidor de Auris que rastrea la sesión activa, incluyendo información del dispositivo, dirección IP y los métodos de autenticación usados (claims acr/amr).

El token de acceso es la credencial principal que usa tu aplicación. Cuando expira, el SDK usa automáticamente el token de refresco para obtener un nuevo token de acceso (si autoRefresh está habilitado). El propio token de refresco puede rotarse en cada uso para mayor seguridad.

Configurar Políticas de Sesión

Las políticas de sesión controlan cuánto tiempo permanecen válidas las sesiones y bajo qué condiciones expiran. Configúralas en la Consola de Auris en Configuración → Seguridad.

Configuración de Duración de Sesión

| Ajuste | Por Defecto | Descripción |

|--------|------------|-------------|

| Duración del token de acceso | 60 minutos | Tiempo que un token de acceso es válido antes de que deba refrescarse |

| Duración del token de refresco | 30 días | Tiempo máximo que un token de refresco puede usarse para obtener nuevos tokens de acceso |

| Expiración absoluta de sesión | 30 días | Duración máxima de sesión independientemente de la actividad. Tras este período, el usuario debe reautenticarse |

| Tiempo de espera por inactividad | 7 días | Si un usuario no realiza ninguna acción autenticada en este período, la sesión se invalida |

| Rotación del token de refresco | Habilitado | Cuando está habilitado, cada uso de un token de refresco emite un nuevo token y el antiguo queda invalidado |

Configurar desde la Consola

  1. Navega a Consola → Configuración → Seguridad

  2. En la sección Política de Sesión, ajusta los valores

  3. Haz clic en Guardar

Los cambios tienen efecto inmediato para las nuevas sesiones. Las sesiones existentes continúan con su política original hasta que expiren.

Configurar mediante la API

curl -X PATCH https://auth.tudominio.com/api/settings/security \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: your-tenant-id" \ -H "Content-Type: application/json" \ -d '{ "accessTokenLifetime": 3600, "refreshTokenLifetime": 2592000, "absoluteSessionExpiry": 2592000, "idleTimeout": 604800, "refreshTokenRotation": true }'

Todas las duraciones están en segundos.

Las duraciones cortas de los tokens de acceso (15-30 minutos) combinadas con la rotación del token de refresco proporcionan la mejor postura de seguridad. El SDK gestiona el refresco automáticamente, por lo que las duraciones más cortas no impactan la experiencia del usuario.

Rotación de Tokens

Cómo Funciona la Rotación del Token de Refresco

Cuando la rotación del token de refresco está habilitada (recomendado), el flujo de intercambio de tokens funciona así:

  1. Tu aplicación envía el token de refresco actual al endpoint de tokens

  2. Auris valida el token de refresco y comprueba que no ha sido revocado

  3. Auris emite un nuevo token de acceso y un nuevo token de refresco

  4. El token de refresco antiguo queda inmediatamente invalidado

  5. Tu aplicación almacena el nuevo token de refresco, reemplazando el antiguo

Cliente Endpoint de Tokens Auris | | | POST /api/auth/token | | grant_type=refresh_token | | refresh_token=old_RT_abc123 | |--------------------------------------->| | | Validar old_RT_abc123 | | Invalidar old_RT_abc123 | | Emitir new_AT + new_RT_def456 | { access_token, refresh_token } | |<---------------------------------------| | | | (old_RT_abc123 ya no es válido) |

Por Qué Importa la Rotación

Sin rotación, un token de refresco robado puede usarse indefinidamente (hasta que expire) para generar nuevos tokens de acceso. Con rotación:

  • Cada token de refresco solo puede usarse una vez

  • Si un atacante roba y usa un token de refresco, el siguiente intento de refresco del usuario legítimo falla (porque el token ya fue consumido)

  • Auris detecta esto como una anomalía de reutilización y puede invalidar todos los tokens de la misma familia, forzando la reautenticación

Detección de Reutilización

Si Auris recibe un token de refresco que ya ha sido consumido (indicando que fue robado y reproducido):

  1. Invalida todos los tokens de refresco de la misma familia de tokens

  2. Registra un evento de seguridad en el log de auditoría

  3. El usuario debe reautenticarse en todos los dispositivos

Esta es la principal defensa contra el robo de tokens de refresco en aplicaciones basadas en navegador.

Asegúrate de que tu aplicación gestione el almacenamiento de tokens de forma atómica. Si se recibe una respuesta de refresco pero el nuevo token no se almacena (p. ej., por un fallo), el token antiguo ya no es válido y el usuario deberá reautenticarse. El SDK gestiona esto correctamente con un patrón write-then-ack.

Revocar Sesiones de Forma Programática

Revocar una Sesión Específica

Para revocar una sola sesión (p. ej., cuando un usuario hace clic en “Cerrar sesión” en un dispositivo específico):

curl -X DELETE https://auth.tudominio.com/api/sessions/{sessionId} \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: your-tenant-id"

O desde el SDK:

import { AurisClient } from '@auris/js' const auris = new AurisClient({ domain: 'auth.tuempresa.com', clientId: 'your-client-id', }) // Cerrar sesión en la sesión actual await auris.logout({ returnTo: 'https://tuapp.com' })

Revocar Todas las Sesiones de un Usuario

En un incidente de seguridad (cuenta comprometida, credenciales robadas), puede que necesites terminar inmediatamente todas las sesiones de un usuario en todos sus dispositivos:

curl -X POST https://auth.tudominio.com/api/users/{userId}/revoke-sessions \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: your-tenant-id"

Esta llamada:

  1. Invalida todos los tokens de refresco del usuario

  2. Marca todas las sesiones activas como revocadas

  3. Los tokens de acceso del usuario seguirán funcionando hasta que expiren (son JWT sin estado), pero no podrán refrescarse

Para invalidar también los tokens de acceso inmediatamente, tu servidor de recursos debe comprobar el estado de la sesión en cada solicitud en lugar de depender únicamente del vencimiento del JWT. El middleware @auris/nextjs hace esto automáticamente mediante la llamada a verifySessionActive().

Forzar Reautenticación

Para requerir que un usuario se reautentique en su próxima interacción sin terminar las sesiones existentes:

curl -X POST https://auth.tudominio.com/api/users/{userId}/force-reauth \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: your-tenant-id"

Esto invalida todos los tokens de refresco pero permite que los tokens de acceso actuales completen las solicitudes en vuelo. La próxima vez que el SDK intente un refresco de token, fallará y redirigirá al usuario al inicio de sesión.

Gestión de Sesiones en Múltiples Dispositivos

Auris rastrea las sesiones por dispositivo, permitiendo a los usuarios y administradores ver y gestionar las sesiones activas en todos los dispositivos.

Listar Sesiones Activas

Los usuarios pueden ver sus propias sesiones:

curl https://auth.tudominio.com/api/user/sessions \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: your-tenant-id"

Respuesta:

{ "ok": true, "data": [ { "id": "sess_abc123", "deviceInfo": "Chrome 120 en macOS", "ipAddress": "203.0.113.42", "location": "Milán, Italia", "lastActiveAt": "2026-01-15T14:30:00Z", "createdAt": "2026-01-10T09:00:00Z", "isCurrent": true }, { "id": "sess_def456", "deviceInfo": "Safari en iPhone 15", "ipAddress": "198.51.100.17", "location": "Roma, Italia", "lastActiveAt": "2026-01-14T18:00:00Z", "createdAt": "2026-01-12T11:00:00Z", "isCurrent": false } ] }

Revocar la Sesión de un Dispositivo Específico

Un usuario puede revocar cualquier sesión que no sea la actual:

curl -X DELETE https://auth.tudominio.com/api/user/sessions/sess_def456 \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: your-tenant-id"

Gestión de Sesiones por Administradores

Los administradores pueden ver y revocar sesiones de cualquier usuario en la Consola:

  1. Navega a Usuarios y selecciona el usuario

  2. Abre la pestaña Sesiones

  3. Ve todas las sesiones activas con dispositivo, IP, ubicación y última actividad

  4. Haz clic en Revocar en sesiones individuales o Revocar Todas para terminar todas las sesiones

Los administradores también pueden acceder mediante la API:

# Listar todas las sesiones de un usuario (admin) curl https://auth.tudominio.com/api/admin/sessions?userId={userId} \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: your-tenant-id" # Revocar una sesión específica (admin) curl -X DELETE https://auth.tudominio.com/api/admin/sessions/{sessionId} \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: your-tenant-id"

Buenas Prácticas de Seguridad de Sesiones

Usa duraciones cortas para los tokens de acceso. Los tokens de acceso son sin estado y no pueden revocarse individualmente. Mantenlos cortos (15-60 minutos) para que la revocación tenga efecto rápidamente cuando se invaliden los tokens de refresco.

Habilita la rotación del token de refresco. Esta es la defensa más efectiva contra el robo de tokens. Auris la habilita por defecto — no la deshabilites a menos que tengas una razón técnica específica.

Establece una expiración absoluta de sesión razonable. Incluso con rotación del token de refresco, las sesiones deben tener un límite superior. Para la mayoría de aplicaciones, 30 días es un buen valor predeterminado. Para aplicaciones de alta seguridad (banca, sanidad), considera 1-7 días.

Configura el tiempo de espera por inactividad. Los usuarios que dejan de usar la aplicación deben cerrarse sesión automáticamente. Un tiempo de espera de 7 días equilibra seguridad y comodidad para la mayoría de casos de uso.

Verifica las sesiones en el servidor para operaciones sensibles. Para acciones como cambiar correo, habilitar/deshabilitar MFA o iniciar transacciones financieras, llama al endpoint de verificación de sesión de Auris para confirmar que la sesión sigue activa y no ha sido revocada:

import { getSession } from '@auris/nextjs/server' export async function transferirFondos(req: Request) { const session = await getSession() if (!session) { return Response.json({ error: 'Sesión expirada' }, { status: 401 }) } // La sesión es válida y está activa — continuar }

Monitoriza los eventos de sesión. Suscríbete a los eventos de webhook login.succeeded y user.session_revoked para rastrear la creación y terminación de sesiones en tu sistema de auditoría.

Guías Relacionadas