JWT Decoder

Decodifica el header y payload de un JSON Web Token para inspeccionar claims.

sys-dev-toolkit.lovable.app/herramientas/jwt-decoder

Herramienta

Vigenteiat: 11/14/2023, 10:13:20 PMexp: 3/17/2030, 5:46:40 PM
Header
{
  "alg": "HS256",
  "typ": "JWT"
}
Payload
{
  "sub": "1234567890",
  "name": "Admin",
  "iat": 1700000000,
  "exp": 1900000000
}
Signature
abc123signaturePlaceholder

Qué problema resuelve

Necesitas revisar el contenido y expiración de un token JWT sin escribir código.

JWT (JSON Web Token, RFC 7519) es el formato de token más extendido en autenticación web moderna. Este decodificador JWT descompone al instante header, payload y firma para que puedas inspeccionar claims como sub, exp, iat, iss o aud sin escribir una sola línea de código. Todo se procesa en tu navegador: nada de servidores intermedios, nada de logs, seguro incluso con tokens de staging.

Estructura de un JWT

Un JWT es una cadena con tres partes separadas por puntos: header.payload.firma. Header y payload son JSON codificado en Base64URL (variante URL-safe de Base64); la firma es HMAC-SHA256 o RSA/ECDSA. El header declara el algoritmo (`alg`) y el tipo (`typ: JWT`). El payload contiene los claims. La firma garantiza que nadie ha modificado los dos primeros bloques.

Claims estándar (registered claims)

RFC 7519 define claims comunes: `iss` (emisor), `sub` (sujeto/usuario), `aud` (audiencia), `exp` (expiración Unix), `nbf` (not before), `iat` (issued at), `jti` (ID único). Verificar `exp` y `aud` es imprescindible en el backend: aceptar tokens caducados o dirigidos a otra API es una vulnerabilidad crítica.

Verificación de firma vs decodificación

Este decodificador NO verifica la firma: sólo lee las tres partes. Para verificar necesitas la clave secreta (HS*) o pública (RS*/ES*). Nunca aceptes un JWT en tu backend sin verificar firma y expiración. Bibliotecas como jsonwebtoken (Node), pyjwt (Python) o jose (Java) hacen ambas cosas.

Vulnerabilidades comunes en JWT

Los ataques históricos más famosos son: `alg: none` (algunos parsers antiguos aceptaban tokens sin firma), confusión de algoritmos (firmar HS256 con la clave pública RS256), y tokens sin expiración. Usa siempre exp corto (15 min), refresh tokens rotativos y una whitelist explícita de algoritmos aceptados en tu backend.

Casos de uso comunes

  • Depurar por qué una API devuelve 401 aunque el usuario esté logueado.
  • Ver qué claims incluye tu proveedor OAuth (Google, Auth0, Okta).
  • Comprobar la expiración de un token antes de reportar un incidente.
  • Formación: enseñar a nuevos devs cómo funciona OAuth y OpenID Connect.

Buenas prácticas

  • Expiraciones cortas para access tokens (5-15 minutos), largas sólo para refresh tokens.
  • No pongas datos sensibles en el payload: es legible por cualquiera con el token.
  • Verifica siempre alg, iss, aud y exp en el backend.
  • Usa una lista de revocación (o cache Redis con TTL) para invalidar tokens comprometidos.

Preguntas frecuentes

¿Se verifica la firma?

No. Este decodificador solo lee las tres partes en Base64URL.

¿Es seguro pegar mis tokens?

El decodificado ocurre 100% en tu navegador. Aun así, evita pegar tokens de producción.