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:
-
Sesión OAuth — Un registro en el servidor que rastrea el estado de autenticación, almacenado con una cookie
httpOnlyen 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. -
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.
-
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.
-
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
-
Navega a Consola → Configuración → Seguridad
-
En la sección Política de Sesión, ajusta los valores
-
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í:
-
Tu aplicación envía el token de refresco actual al endpoint de tokens
-
Auris valida el token de refresco y comprueba que no ha sido revocado
-
Auris emite un nuevo token de acceso y un nuevo token de refresco
-
El token de refresco antiguo queda inmediatamente invalidado
-
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):
-
Invalida todos los tokens de refresco de la misma familia de tokens
-
Registra un evento de seguridad en el log de auditoría
-
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:
-
Invalida todos los tokens de refresco del usuario
-
Marca todas las sesiones activas como revocadas
-
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:
-
Navega a Usuarios y selecciona el usuario
-
Abre la pestaña Sesiones
-
Ve todas las sesiones activas con dispositivo, IP, ubicación y última actividad
-
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
-
Inicio de Sesión Alojado (PKCE) — Cómo se emiten los tokens durante el flujo de inicio de sesión
-
Autenticación Multifactor — Añadir un segundo factor a la creación de sesiones
-
Protección Contra Ataques — Bloqueo por fuerza bruta y detección de inicio de sesión sospechoso
-
Limitación de Tasa — Límites de tasa de la API en los endpoints de autenticación