tokens de sesión
Passwork utiliza un modelo de autenticación basado en token con un par de token de acceso/token de actualización.
Descripción general del sistema de tokens
| Ficha | Propósito | Toda la vida |
|---|---|---|
| Token de acceso | API solicitar autenticación | ~2,8 horas |
| Actualizar token | Renovación del token de acceso | 36 horas |
¿Por qué no JWT?
Los tokens Passwork son cadenas aleatorias, no JWT. Para un administrador de contraseñas, este enfoque proporciona mayor seguridad:
| Característica | Passwork fichas | JWT |
|---|---|---|
| Formato | Cadena aleatoria Base64 | JSON con firma |
| Información en token | Ninguno | Carga útil con datos |
| Validación | Búsqueda de bases de datos | Verificación de firma |
| Revocación de tokens | Instantáneo (eliminación de base de datos) | Requiere lista negra |
Ventajas de seguridad:
-
Revocación instantánea de la sesión. Si se sospecha que está comprometida, el administrador o el usuario pueden finalizar inmediatamente cualquier sesión: el token se elimina de la base de datos y deja de ser válido inmediatamente. JWT continúa funcionando hasta su vencimiento.
-
Control total de la sesión. Todas las sesiones activas se almacenan en el servidor, lo que permite rastrear dispositivos, direcciones IP y la hora de la última actividad. El administrador ve la imagen completa y puede gestionar el acceso.
-
No hay datos confidenciales en el token. JWT contiene una carga útil con información del usuario que se puede leer (Base64 no es cifrado). Los tokens Passwork son simplemente identificadores aleatorios sin ninguna información.
-
Resistencia al compromiso de claves. Si se filtra la clave secreta JWT, el atacante puede crear tokens válidos para cualquier usuario. Con los tokens de sesión, este vector de ataque no existe.
-
Sin clave secreta de firma. JWT requiere almacenar la clave privada en el servidor para la firma del token, otro secreto para proteger, rotar y controlar. Los tokens de sesión Passwork son solo cadenas aleatorias, no se necesitan claves secretas para su generación.
Token de acceso
Características
| Parámetro | Valor |
|---|---|
| Longitud | 256 bits |
| Formato | Base64 |
| Longitud de la cadena | ~44 caracteres |
| Entropía | 256 bits |
| Duración predeterminada | 10.000 segundos (~2,8 horas) |
Generación
El token de acceso se genera con un generador de números aleatorios criptográficamente seguro:
token = base64(random_bytes(32))
Validación
En cada solicitud, el servidor:
- Extrae el token (de la cookie o del encabezado, según el modo)
- Busca token en la base de datos
- Cheques de por vida
- Solicitud de enlaces al usuario
Modos de transmisión de tokens
Passwork utiliza dos modos de transmisión de token de acceso según el tipo de cliente:
Modo navegador (aplicación web)
Para aplicaciones web, el token de acceso se transmite a través de HttpOnly Cookie:
| Parámetro | Valor |
|---|---|
| Solo HTTP | Sí, inaccesible para JavaScript (protección XSS) |
| Seguro | Sí, solo HTTPS |
| Mismo sitio | Estricto: protección CSRF |
En este modo, el navegador adjunta automáticamente una cookie a cada solicitud. El token de acceso no se devuelve en el cuerpo de la respuesta durante la autenticación, solo en el encabezado Set-Cookie.
Modo API (escritorio, extensión, móvil)
Para los clientes API, el token de acceso se transmite en el encabezado Authorization:
Authorization: Bearer {access_token}
En este modo, el token de acceso se devuelve en el cuerpo de la respuesta durante la autenticación y el cliente administra el almacenamiento de forma independiente.
Comparación de modos
| Parámetro | Modo navegador | Modo API |
|---|---|---|
| Clientes | Aplicación web | Escritorio, Extensión, Móvil |
| Transmisión de token | Cookie HttpOnly | Encabezado de autorización |
| Protección XSS | ✓ (Solo HTTP) | Depende del cliente |
| Gestión de tokens | Navegador (automático) | Cliente (manual) |
Actualizar token
Características
| Parámetro | Valor |
|---|---|
| Longitud | 256 bits |
| Formato | Base64 |
| Longitud de la cadena | ~44 caracteres |
| Entropía | 256 bits |
| Duración predeterminada | 129.600 segundos (36 horas) |
Objetivo
El token de actualización se utiliza para obtener un nuevo token de acceso sin volver a autenticarse. Más información sobre el proceso de renovación en la sección Rotación de tokens.
Configuración de por vida
Por roles de usuario
La vida útil del token se configura en el nivel de rol del usuario:
| Configuración | Valor predeterminado |
|---|---|
| Vida útil del token de acceso | 10.000 segundos (~2,8 horas) |
| Actualizar vida útil del token | 129.600 segundos (36 horas) |
Ejemplos de configuración
| Escenario | Acceso TTL | Actualizar TTL |
|---|---|---|
| Usuario estándar | 10.000 segundos | 129.600 segundos |
| Alta seguridad | 1.800 segundos (30 min) | 14.400 segundos (4 horas) |
| Comodidad | 28.800 segundos (8 horas) | 604.800 segundos (7 días) |
Ciclo de vida de la sesión
Ciclo de vida completo
T=0: Autenticación. El usuario ingresa las credenciales. El servidor crea un token de acceso (TTL: 2,8 horas) y un token de actualización (TTL: 36 horas).
T=2.8h: El token de acceso expiró. El cliente envía el token de actualización. El servidor emite nuevos tokens. El token de actualización anterior está invalidado.
T=36h: El token de actualización expiró. Se requiere reautenticación. El usuario ingresa las credenciales nuevamente.
Escenario alternativo: Cerrar sesión. El usuario hace clic en "Cerrar sesión". Ambos tokens están invalidados. Sesión terminada.
invalidación de token
Todos los tokens de sesión se invalidan en:
- Cerrar sesión de usuario
- Cambio de contraseña maestra
- Restablecer contraseña maestra de administrador
Rotación de tokens
Modo estándar (aplicaciones)
Para aplicaciones web, extensiones de navegador, aplicaciones móviles y de escritorio, se aplica una política estricta de rotación de tokens.
Al actualizar la sesión, el cliente envía el token de acceso y el token de actualización simultáneamente y recibe un nuevo par de tokens en respuesta. Esto proporciona una rotación continua de ambos tokens, evitando la reutilización de tokens robados.
Modo de automatización (API)
Para las tareas y la automatización de DevOps, la rotación estricta suele resultar inconveniente. Por lo tanto, para las sesiones creadas mediante la generación de tokens API, está disponible el modo alternativo:
accessTokensolo se actualiza sin cambiorefreshToken- Renovación separada de
refreshTokencuando sea necesario
Esto permite utilizar refreshToken de larga duración en scripts y canalizaciones de CI/CD. Los puntos finales de rotación HTTP se describen en la documentación API tokens.
Seguridad de tokens
Protección de interceptación
| Amenaza | Protección |
|---|---|
| Intercepción de red | HTTPS/TLS requerido |
| Ataque XSS | Cookies HttpOnly (Modo Navegador) |
| CSRF | Token CSRF + cookies del mismo sitio |
Ficha CSRF
Objetivo
CSRF Token protege contra ataques de falsificación de solicitudes entre sitios. Requerido para todas las operaciones de modificación.
Características
| Parámetro | Valor |
|---|---|
| Tamaño | 256 bits |
| Formato | Hexadecimal (64 caracteres) |
| Entropía | 256 bits |
| Generador | Criptográficamente seguro |
Uso
El token CSRF se transmite en el encabezado de cada solicitud:
X-CSRF-Token: {csrf_token}
Requisitos por tipo de cliente
| Tipo de cliente | Ficha CSRF |
|---|---|
| Aplicación web (modo navegador) | ✓ Requerido (generado y validado automáticamente) |
| Extensión del navegador | Opcional (a petición del cliente) |
| Aplicación móvil | Opcional (a petición del cliente) |
| API | — (no utilizado) |
Signo de galleta
Objetivo
Función de protección adicional opcional para el modo de navegador. Vincula la sesión al contexto del cliente, protegiendo contra el robo de cookies y el secuestro de sesión.
como funciona
Cuando está habilitado, el servidor calcula la firma en función de:
- Dirección del cliente IP
- Agente de usuario del navegador
- Identificador de sesión
- Clave secreta (60 caracteres, ~357 bits de entropía)
La firma se calcula mediante la fórmula:
cookieSign = HMAC-SHA512(IP + UserAgent + SessionID, secret)
La firma se guarda en una cookie HttpOnly independiente y se verifica en cada solicitud.
Protección contra ataques
| Ataque | Protección |
|---|---|
| Secuestro de sesión | La cookie robada no funciona desde diferentes IP |
| Robo de cookies | Cookie inútil sin coincidir IP + User-Agent |
Limitaciones
- El cambio IP (VPN, red móvil) requiere reautenticación
- La actualización del navegador puede cambiar User-Agent
Habilitando
La función la habilita el administrador en la configuración del sistema. Deshabilitado de forma predeterminada para compatibilidad con usuarios con IP dinámico.
Tipos de clientes
Passwork distingue cuatro tipos de clientes con diferentes mecanismos de seguridad:
| Característica | Web | Extensión del navegador | Móvil | API |
|---|---|---|---|---|
| Modo de transmisión de token | Modo navegador | Modo API | Modo API | Modo API |
| Token de acceso | Galleta | Encabezado | Encabezado | Encabezado |
| Token CSRF | ✓ Requerido | Opcional | Opcional | — |
| Signo de galleta | Opcional | — | — | — |
| Código PIN | — | ✓ Compatible | — | — |
Extensión del navegador: solo el tipo de cliente que admite el código PIN del lado del servidor. El PIN se verifica en el servidor, lo que abre una ventana temporal para el uso de API. Después del tiempo de espera, la sesión se bloquea hasta que se reingresa el PIN. En caso de varios intentos incorrectos, el servidor finaliza inmediatamente la sesión. Esto protege contra el robo de tokens; incluso con el token comprometido, el atacante no puede usar API sin conocer el PIN.
encabezados HTTP
Encabezados de autenticación
| Encabezado | Descripción | Modo |
|---|---|---|
Authorization | Token de acceso (Bearer {token}) | Modo API |
Cookie | Token de acceso (automático) | Modo navegador |
X-CSRF-Token | Protección CSRF | Todos los modos |
X-Master-Key-Hash | Hash de clave maestra | Cuando sea necesario |
Almacenamiento de tokens del lado del cliente
Cada tipo de cliente implementa un almacenamiento seguro de tokens según las capacidades de la plataforma:
- Aplicación web: token de acceso almacenado en la cookie HttpOnly, inaccesible para JavaScript (protección XSS)
- Aplicaciones de escritorio y móviles: tokens almacenados en un almacenamiento seguro del sistema operativo con acceso restringido
- Extensión del navegador: se utiliza almacenamiento aislado del navegador, inaccesible desde páginas web
Múltiples sesiones
Sesiones paralelas
Passwork admite múltiples sesiones simultáneas:
- El usuario puede autenticarse en múltiples dispositivos
- Cada dispositivo tiene su propio par de tokens
- Cerrar sesión en un dispositivo no afecta a los demás
Gestión de sesiones
El usuario puede:
- Ver lista de sesiones activas
- Terminar una sesión específica
- Terminar todas las sesiones (excepto la actual)
El administrador puede:
- Forzar la finalización de todas las sesiones de usuario
Recomendaciones de configuración
Alta seguridad
| Parámetro | Valor |
|---|---|
| Token de acceso | 30 minutos |
| Actualizar ficha | 4 horas |
- Reautenticación frecuente
- Ventana de ataque corta
- Adecuado para sistemas críticos
Saldo de seguridad y conveniencia (predeterminado)
| Parámetro | Valor |
|---|---|
| Token de acceso | ~2,8 horas |
| Actualizar ficha | 36 horas |
- Jornada laboral sin reautenticación
- Actualizar token durante aproximadamente 1,5 días laborables
- Adecuado para la mayoría de las organizaciones
Máxima comodidad
| Parámetro | Valor |
|---|---|
| Token de acceso | 8 horas |
| Actualizar ficha | 7 días |
- Autenticación una vez por semana
- Adecuado para escenarios de bajo riesgo
- No recomendado para datos críticos.