En lugar de persistir un token generado aleatoriamente, he visto una estrategia de persistir la salida de HMAC-SHA256 utilizando el token y una clave privada.
¿La razón para usar una función hash con una clave privada es que un atacante necesitaría la clave para inyectar tokens adecuados en la base de datos?
¿Hay otros beneficios o desventajas de este método?
La adopción de esta metodología funcionaría en el siguiente escenario de administración de sesión:
Requisitos:
- El usuario debe poder revocar todas las sesiones o sesiones individuales
- La revocación debe ser instantánea
Emisión:
- El usuario inicia sesión con correo electrónico y contraseña
- Crear ID de sesión aleatoria de 128 bits
- Cree una firma mediante el hash del identificador de sesión con una clave privada usando HMAC-SHA256
- Almacene una asignación entre la firma y el ID de usuario en la base de datos
- Emita un token de sesión para el cliente: "{ID de sesión} - {firma}"
Validación:
- Recibir el token de sesión "{ID de sesión} - {firma}"
- Verifique la firma calculando HMAC con la clave privada y el ID de sesión recibido. Descarte preventivamente la solicitud si no es válida.
- El token es válido, obtenga el ID de usuario de la base de datos utilizando la firma.
¿O todo esto es una ingeniería excesiva comparada con el uso de una ID de sesión de 128 bits, la hash sin clave privada y el mapa para la ID de usuario? (es decir, los beneficios no son lo suficientemente significativos y aún se pueden realizar ataques)
¡Gracias!