Skip to main content
Teksolvr
Ciberseguridad26 de julio de 20269 min read

¿Qué es un Token JWT? Requisitos, Algoritmos de Firma y Mejores Prácticas de Seguridad

Rudra Chauhan, Senior Systems Architect

¿Qué es un Token JWT? Requisitos, Algoritmos de Firma y Mejores Prácticas de Seguridad

¿Qué es un Token JWT? Requisitos, Algoritmos de Firma y Mejores Prácticas de Seguridad

Los tokens JSON Web (JWT) especificados en RFC 7519 son un método abierto e industrializado para representar reclamos de manera segura entre dos partes. Los JWT se utilizan ampliamente para la autenticación sin estado en APIs REST, microservicios y aplicaciones de una sola página (SPAs).

Sin embargo, una implementación inadecuada de la verificación de JWT puede introducir vulnerabilidades críticas de bypass de autenticación.

Anatomía de un Token JWT

Un string de JWT consta de tres partes base64url codificadas separadas por puntos (.):

CABECERA . RECLAMOS . FIRMA

Ejemplo:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1. Cabecera

Contiene el tipo de token y el algoritmo de firma:

json
{
  "alg": "HS256",
  "typ": "JWT"
}

2. Reclamos (Requisitos)

Contiene declaraciones sobre una entidad (normalmente el usuario) y metadata adicional:

  • sub (Sujeto): Identificador del usuario
  • iat (Emisión): Fecha de emisión
  • exp (Expiración): Fecha de expiración
  • iss (Emisor): Dirección URL del proveedor de identidad

3. Firma

Se crea tomando la cabecera codificada, el reclamo codificado, una clave secreta y firmándola con el algoritmo especificado.

Estructura de Reclamos de JWT

json
{
  "iss": "https://example.com",
  "sub": "1234567890",
  "iat": 1643723900,
  "exp": 1643723900,
  "aud": "https://example.com/api/v1",
  "jti": "1234567890",
  "name": "John Doe",
  "email": "john.doe@example.com",
  "roles": ["admin", "moderador"]
}

Generación de Firma de JWT

bash
echo -n '{"alg":"HS256","typ":"JWT"}' | base64
echo -n '{"iss":"https://example.com","sub":"1234567890","iat":1643723900,"exp":1643723900,"aud":"https://example.com/api/v1","jti":"1234567890","name":"John Doe","email":"john.doe@example.com","roles":["admin","moderador"]}' | base64
clave_secreta="su_clave_secreta_aqui"
firma=$(echo -n "$(base64 -d <<< "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9")$(base64 -d <<< "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ")" | openssl dgst -sha256 -hmac "$clave_secreta" -binary | base64 -w 0)

2. Firma Simétrica (HS256) vs Asimétrica (RS256)

CaracterísticaHMAC SHA-256 (HS256)RSA SHA-256 (RS256)
Tipo de ClaveClave compartida (Simétrica)Par de claves pública y privada (Asimétrica)
FirmaRealizada con la clave secretaRealizada con la clave privada
VerificaciónRealizada con la clave secretaRealizada con la clave pública
Mejor paraServidores monolíticos donde un solo servidor emite y verificaMicroservicios / APIs distribuidas / OAuth2

3. Vulnerabilidades Comunes de JWT a Evitar

1. La Vulnerabilidad "alg: none"

Algunas bibliotecas mal escritas aceptan tokens donde alg está configurado en none, lo que evita la validación de la firma. Siempre fuerce explícitamente los algoritmos permitidos en el middleware del servidor.

2. Ataque de Confusión de Algoritmo (HS256 vs RS256)

Si un servidor espera RS256 (asimétrico) pero recibe HS256, un atacante puede firmar el token utilizando la clave pública del servidor como la clave secreta. Verifique el algoritmo del token antes de la evaluación de la firma.

3. Falta de Verificación de Expiración (exp)

Los tokens sin expiración viven para siempre. Siempre fuerce una vida corta (por ejemplo, 15 minutos) para los tokens de acceso y utilice la rotación de tokens de refresco.

4. Herramientas de Desarrollo en Teksolvr

Inspeccione y depure tokens de manera segura con las herramientas de Teksolvr:

5. Ejemplos de Uso

  • Autenticación: Utilice JWT para la autenticación sin estado en APIs REST, microservicios y aplicaciones de una sola página (SPAs).
  • Autorización: Utilice JWT para almacenar roles y permisos del usuario, permitiendo un control de acceso fino.
  • Gestión de Sesiones: Utilice JWT para gestionar sesiones de usuario, eliminando la necesidad de almacenamiento de sesiones en el servidor.

6. Mejores Prácticas de Seguridad

  • Utilice HTTPS para prevenir la interceptación y la manipulación de tokens.
  • Fuerce tokens de acceso y tokens de refresco con vida corta.
  • Utilice un generador de números aleatorios seguro para generar claves secretas.
  • Implemente la lista de tokens negros para prevenir el uso de tokens reutilizados.
  • Rotee claves secretas y tokens de refresco regularmente.

7. Referencias

  • RFC 7519: Tokens JSON Web (JWT)
  • RFC 7515: Firma JSON Web (JWS)
  • RFC 7516: Encriptación JSON Web (JWE)

8. Créditos de Imagen

  • Nombre del Diagrama

    Nombre del Diagrama

9. Lista de Verificación de Solución de Problemas

  • Verifique la firma y el algoritmo del token.
  • Verifique la expiración y la rotación de tokens de refresco.
  • Asegúrese de utilizar un generador de números aleatorios seguro para la generación de claves secretas.
  • Implemente la lista de tokens negros para prevenir el uso de tokens reutilizados.

10. Preguntas Frecuentes

  • Q: ¿Qué es un token JWT? A: Un token JWT es un objeto JSON que contiene reclamos, una firma y una cabecera.
  • Q: ¿Cuál es la diferencia entre firma simétrica y asimétrica? A: La firma simétrica utiliza una clave secreta compartida, mientras que la firma asimétrica utiliza un par de claves pública y privada.
  • Q: ¿Cómo puedo prevenir la vulnerabilidad "alg: none"? A: Siempre fuerce explícitamente los algoritmos permitidos en el middleware del servidor.

11. Conclusión

Los tokens JSON Web (JWT) son un método ampliamente utilizado para representar reclamos de manera segura entre dos partes. Sin embargo, una implementación inadecuada de la verificación de JWT puede introducir vulnerabilidades críticas de bypass de autenticación. Siguiendo las mejores prácticas de seguridad, como utilizar HTTPS, fuerzar tokens de acceso y tokens de refresco con vida corta, y implementar la lista de tokens negros, puede asegurar un uso seguro y confiable de tokens JWT en sus aplicaciones.

¿Te resultó útil esta guía?

¿Está solucionando problemas o probando esta guía?

Teksolvr proporciona 97 herramientas gratuitas para inspeccionar configuraciones DNS, validar certificados DKIM, probar puertos abiertos, verificar listas negras de servidores y realizar cálculos.