Cuando un usuario inicia sesión, el servidor normalmente genera un id de sesión y almacena al usuario en una tabla; cada solicitud luego consulta esa tabla. Eso funciona en una sola máquina, pero un conjunto de servidores API sin estado no puede compartir una tabla en memoria sin una caché o sesiones fijas (sticky sessions).

JWT traslada las declaraciones del usuario al propio token. El token es una carga útil JSON compacta y segura para URL, firmada para que no pueda falsificarse. El servidor comprueba la firma y lee las declaraciones directamente del token.

El resultado es una autenticación sin estado: cualquier servidor que conozca la clave pública puede verificar a cualquier usuario sin un almacén de sesiones compartido. Las declaraciones y la prueba viajan juntas, y por eso JWT se convirtió en la opción predeterminada para la autenticación de API y el inicio de sesión único.

Pon las declaraciones en el token; la firma es la prueba.

Como el token es autocontenido, un verificador no necesita consultar una base de datos, por lo que la ruta de la solicitud se mantiene plana y rápida.

La firma, no la sesión, es el ancla de confianza, por lo que cualquier servidor sin estado que tenga la clave puede verificar cualquier token.

Su estructura de tres partes header.payload.signature es simple de implementar para todos los lenguajes de un ecosistema web.

Se compone con OAuth y OpenID Connect, por lo que el mismo token funciona en muchos servicios y productos.

Si la prueba viaja con la declaración, puedes verificar en cualquier lugar y escalar el verificador horizontalmente, porque la identidad se vuelve autocontenida en lugar de una consulta.

JWT se estandarizó como RFC 7519 en mayo de 2015, completo con una familia JWS/JWE. Se convirtió en la opción predeterminada para la autenticación de aplicaciones de una sola página, las pasarelas de API y los microservicios. Sus debilidades conocidas son la revocación (un token no puede invalidarse antes de su expiración sin una lista de denegación) y los errores de confusión de algoritmos, además de la sobrecarga de tamaño frente a las sesiones opacas.

CONSULTA LAS PRUEBAS

Las fuentes

  1. RFC 7519: JSON Web Token (JWT) IETF / RFC Editor · rfc-editor.org
  2. JSON Web Token Wikipedia · en.wikipedia.org