Inicio > Glosario de ciberseguridad > JWT (JSON Web Token) 🟢 Protección

JWT (JSON Web Token) 🟢 Protección

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 (.) :

  1. 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"}.
  2. 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) y aud (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.
    • 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).
  3. 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

He aquí un ejemplo simplificado de un JWT, compuesto de tres partes codificadas:

  • Cabecera : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  • Carga útil : eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
  • Firma : SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Este ejemplo ilustra cómo se combinan las tres partes para formar un token completo que garantiza la transmisión segura de la información.


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.
Hacia la ORSYS Cyber Academy: un espacio gratuito dedicado a la ciberseguridad