Estoy creando una API web y me cuesta mucho elegir entre token de sesión criptográfica y token de sesión aleatorio para la autenticación de usuario.
Veo varios pros y amp; contras para cada uno:
-
token de sesión aleatorio almacenado (almacena un par que caduca {token: userId} en una base de datos):
- realmente aleatorio, con un riesgo de colisión insignificante; se puede realizar una verificación única adicional durante la inserción de la base de datos
- almacenado en una base de datos, lo que lleva a costos de escalado, desvía los costos de mantenimiento
- los tokens pueden ser revocados
- no hay riesgo de criptoanálisis mientras se use la función aleatoria correcta
-
token de sesión criptográfica (use una combinación fuertemente encriptada de 'userId, expiryTime' con una clave simétrica común almacenada en el servidor)
- aleatorio en cada sesión, gracias al tiempo de caducidad & un nonce
- no es necesario almacenarlas (no es necesario realizar llamadas de red adicionales): el descifrado simétrico del token de sesión será más rápido. Esto conduce a una mejora masiva de los devops y al costo
- los tokens no pueden ser revocados
- riesgo de criptoanálisis
- riesgo de colisión insignificante pero existente que no se puede prevenir
- riesgo con la clave maestra simétrica
El enfoque más seguro parece ser el token de sesión aleatorio almacenado, sin embargo, los costos & Los problemas relacionados con la base de datos devops realmente me hacen dudar.
¿Alguna ayuda sobre las mejores prácticas, y si los expertos en seguridad considerarán que el token de sesión criptográfico es una prueba de prueba? Tal vez una sugerencia de una solución más fuerte?
El enlace proporcionado aún reconoce que se usan ambos. Me pregunto si un experto en seguridad rechazará el token de criptografía para un sitio web bancario. ¿Dónde trazas la línea?