Por qué los JWT no deberían usarse para gestionar sesiones de usuario

Fuentes: Stop using JWTs

Los JSON Web Tokens (JWT) se han popularizado como mecanismo para mantener la sesión iniciada en aplicaciones web, pero su uso en este contexto resulta inadecuado e inseguro. La especificación de JWT fue concebida únicamente para tokens de vida muy corta, de unos cinco minutos o menos, mientras que las sesiones de usuario requieren duraciones mayores.

Otro argumento central es que la autenticación «sin estado» no resulta viable de forma segura. Cualquier implementación robusta necesita almacenar información sobre los tokens, por lo que, si se requiere un almacén de datos, resulta más lógico guardar allí toda la información de la sesión. Cuando un JWT se limita a contener un identificador de sesión simple, resulta menos eficiente y flexible que una cookie de sesión convencional, sin aportar ventaja real.

La propia especificación JWT tampoco goza de la confianza de la comunidad de seguridad. El diseño original permitía crear tokens falsos y probablemente contiene otros errores. Aunque empresas como Google utilizan JWT, lo hacen como transporte de inicio de sesión único entre servidores, no para sesiones de navegador, y cuentan con equipos de seguridad capaces de mantener una implementación más robusta.

El artículo recomienda evitar también el uso de localStorage y sessionStorage para credenciales de autenticación. Para sesiones web, la alternativa más sencilla y segura son las cookies de sesión estándar, que la mayoría de frameworks ya incorporan. Si se necesita un token firmado de corta duración, la especificación PASETO ofrece un diseño orientado a la seguridad. En definitiva, la documentación del framework y un middleware como express-session bastan para implementar sesiones correctas sin recurrir a JWT.