Curious TechieDev Toolbox
Todas las Guías/Autenticación8 min read

¿Qué es JWT? Arquitectura de JSON Web Tokens (RFC 7519)

Autenticación stateless, estructura de cabecera/payload/firma, Base64URL, ataques de algoritmo y verificación criptográfica.

Puntos Clave
  • Un JWT se compone de tres partes separadas por puntos: Header, Payload y Firma.
  • El contenido está codificado en Base64URL, por lo que cualquiera puede leer los datos sin la clave secreta.
  • Decodificar un token NO equivale a validarlo: la verificación requiere recalcular la firma con la clave.
  • La vulnerabilidad alg: "none" ocurre cuando un backend acepta tokens sin validar su firma.
  • Al ser tokens sin estado (stateless), la revocación inmediata suele requerir listas de revocación.

En arquitecturas modernas de microservicios sin estado y protocolos OAuth 2.0 / OpenID Connect, los JSON Web Tokens (JWT) constituyen el estándar (RFC 7519) para transmitir identidades y autorizaciones de forma segura entre clientes y servidores.

1. Anatomía del Token en 3 Partes

Una cadena JWT se compone de tres secciones codificadas en Base64URL separadas por puntos (.):

1. Cabecera (Rojo)Algoritmo y Tipo de Token
2. Carga Útil (Púrpura)Reivindicaciones y Datos
3. Firma Digital (Azul)Garantía Criptográfica

2. Reivindicaciones Registradas Estándar (iss, exp, sub)

  • iss (Issuer): Entidad que generó y emitió el token.
  • sub (Subject): Identificador único del usuario o entidad.
  • exp (Expiration Time): Marca de tiempo Unix tras la cual el token queda invalidado.
  • iat (Issued At): Momento en el que se emitió el token.

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

HS256 (HMAC-SHA256) emplea una clave secreta compartida entre emisor y receptor. Por su parte, RS256 (RSA-SHA256) firma con clave privada y valida mediante clave pública (JWKS), permitiendo comprobar la integridad del token sin riesgo de filtración de claves de emisión.

4. Errores Críticos de Seguridad y Vulnerabilidades

Las vulnerabilidades más graves incluyen admitir el encabezado "alg": "none", almacenar tokens de acceso en localStorage (vulnerable a XSS) y omitir la verificación criptográfica de la firma.