Un JWT (Token Web JSON) es una norma abierta definida por la RFC 7519 utilizado en ciberseguridad para autenticar y proteger los intercambios de información entre las partes.
Permite transmitir datos de forma compacta, segura y verificable, basándose en firmas digitales o un codificación garantizar la integridad y, en su caso, la confidencialidad de la información.
Estructura de un JWT
Un JWT consta de tres partes principales, cada una codificada en Base64URL y separada por un punto (.
) :
-
Cabecera
- Función Defina el algoritmo de firma (por ejemplo, HS256, RS256, ES256) e indique el tipo de token (generalmente "JWT").
- Ejemplo :
{ "alg": "HS256", "typ": "JWT"}
.
-
Carga útil (carga útil)
- Función Los "reclamos" son información útil como el identificador del usuario, sus funciones y la fecha de caducidad.
- Tipos de siniestros :
- Solicitudes registradas reclamaciones normalizadas como
iss
(transmisor),exp
(caducidad),sub
(sujeto) yaud
(público). - Reclamaciones públicas reivindicaciones: reivindicaciones que pueden ser definidas por la comunidad o por el usuario para la información compartida.
- Reclamaciones privadas información específica de un contexto o aplicación concretos.
- Solicitudes registradas reclamaciones normalizadas como
- Opción de cifrado Aunque la carga útil suele estar simplemente firmada (JWS), puede cifrarse para una protección adicional utilizando el formato JWE (JSON Web Encryption).
-
Firma
- Función Firma: para garantizar la integridad del token. La firma se genera combinando la cabecera y la carga útil (previamente codificada) con una clave secreta o una clave privada (para algoritmos asimétricos) según el algoritmo especificado.
- Ejemplo Para HS256, la firma se obtiene mediante HMAC-SHA256.
👉 Casos de uso en ciberseguridad
- Autenticación Una vez que el usuario ha iniciado sesión, el servidor genera un JWT que el cliente incluye en las peticiones HTTP (por ejemplo, en el archivo
Autorización: Portador
). Esto permite al servidor comprobar la identidad del cliente en cada solicitud sin necesidad de almacenar la sesión en el servidor. - Intercambio seguro de información En una arquitectura de microservicios o cuando las API interactúan, JWT permite que los datos se transmitan de forma fiable y segura.
- Inicio de sesión único (SSO) Compartir sesiones: facilita compartir sesiones entre varias aplicaciones, centralizando la autenticación mediante un único token.
✔ Beneficios
- Sin estado sin almacenamiento en el servidor (a diferencia de las sesiones).
- Portátil puede utilizarse en diversos contextos (web, móvil, API).
- Compacto formato ligero, fácil de transmitir a través de URL, cabeceras HTTP o galletas.
- Flexibles: pueden utilizarse en diversos protocolos y marcos de autenticación, como OAuth2 y OpenID Connect.
Riesgos y buenas prácticas
🔺 Vulnerabilidades comunes
- Firma no verificada Si no se comprueba correctamente la firma, un atacante podría modificar el contenido del token.
- Uso de algoritmos débiles Por ejemplo, utilizar HS256 con una clave débil le expone a ataques de fuerza bruta.
- Almacenamiento inadecuado Almacenar el JWT en ubicaciones vulnerables (como localStorage) puede dar lugar a ataques. XSS y robo de fichas.
- Secuestro de fichas En caso de interceptación, un token robado puede utilizarse para suplantar al usuario.
🟩 Buenas prácticas
- Uso de HTTPS cifrar todas las comunicaciones para evitar que los tokens sean interceptados.
- Elegir algoritmos robustos Deben tomarse las siguientes medidas: utilizar algoritmos seguros (por ejemplo, RSA o ECDSA) y claves suficientemente complejas.
- Limitación de la vida útil definir fechas de expiración cortas (
exp
) para reducir el tiempo de validez del token en caso de compromiso. - Validar sistemáticamente verificar la firma y las reclamaciones cada vez que se utilice el token.
- Mecanismos de revocación Implementar estrategias para invalidar los tokens comprometidos o caducados.
Ejemplo de JWT
Diferencia con otras tecnologías de autenticación
- JWT vs Cookies de sesión Las JWT son autosuficientes y no requieren almacenamiento en el servidor, a diferencia de las cookies de sesión, que dependen de la gestión de la sesión.
- JWT frente a OAuth2 OAuth2 es un marco de autorización que puede utilizar diferentes formatos de token, incluido JWT, para transmitir información de autenticación.
- JWT frente a SAML Mientras que SAML (Security Assertion Markup Language) es un estándar XML diseñado para SSO en entornos corporativos, JWT ofrece un formato más ligero que se adapta mejor a las aplicaciones web modernas.