Saltar al contenido
SDETRole
SDETRole

Glosario · Testing de APIs

JWT (JSON Web Token)

En inglés: JWT

También llamado: JSON Web Token, token JWT, tokens JWT, token web JSON

Definición

Un JSON Web Token es un token compacto y firmado con la forma header.payload.signature que transporta claims como el id del usuario, la caducidad y la audiencia.

Un JSON Web Token (JWT, que en inglés suele pronunciarse “jot”) es una cadena con tres partes codificadas en Base64url y separadas por puntos: un header que indica cómo se firmó, un payload con los claims y una firma. Las APIs suelen recibirlo en la cabecera Authorization: Bearer <token> y verifican la firma para confiar en los claims sin consultar una base de datos. Muchos proveedores de OAuth 2.0 y OpenID Connect emiten access tokens e ID tokens como JWT.

Ejemplo

Un payload decodificado:

{
  "iss": "https://auth.example.com",
  "sub": "user_7f3a",
  "aud": "orders-api",
  "role": "member",
  "iat": 1767225600,
  "exp": 1767229200
}

iss es el emisor, sub el sujeto (normalmente el usuario), aud el destinatario previsto, e iat/exp las horas de emisión y de caducidad en segundos desde la época Unix. Leer el payload en Node 22 no requiere ninguna biblioteca:

const [, payload] = token.split('.');
const claims = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));

Codificado, no cifrado

Un JWT firmado estándar (un JWS) está codificado, no cifrado. Cualquiera que tenga el token puede leer todos los claims, como muestra el fragmento anterior. La firma solo demuestra que el token lo emitió alguien que tiene la clave y que no se ha alterado. Así que nunca pongas secretos ni datos personales en el payload de un JWT a menos que el token esté realmente cifrado (un JWE, un formato distinto y menos habitual). Decodificar un token no es lo mismo que validarlo: una prueba que decodifica un token no ha comprobado nada sobre su autenticidad.

Qué probar

  • Token caducado: fuerza o espera a que pase exp y espera un 401.
  • Payload manipulado: cambia role a admin, conserva la firma antigua y espera un 401. Si se acepta, el servidor no está verificando las firmas.
  • alg: none: un token sin firma debe rechazarse.
  • Audiencia o emisor incorrectos: un token válido para otra API no debería funcionar aquí.
  • Token válido, permisos insuficientes: espera un 403, no un 401, porque el usuario está autenticado pero no autorizado.
  • Cierre de sesión y revocación: los JWT suelen ser válidos hasta que caducan, así que comprueba qué hace el sistema después de cerrar sesión o cambiar la contraseña. La mitigación habitual es una caducidad corta más refresh tokens.

Escribe para buscar en todo SDETRole.

Búsqueda de texto completo con Pagefind · se ejecuta en tu navegador Abrir la página de búsqueda →