Menu

Decodificador JWT

Diseca y verifica JSON Web Tokens parte por parte.

Última actualización

Algoritmo
CodificadoPega un JSON Web Token
Decodificado
El encabezado y la carga aparecen aquí — los tokens no salen de tu navegador.

¿Qué es un decodificador de JWT?

Un decodificador de JWT divide un JSON Web Token en sus tres partes —header, payload y firma— y aplica Base64URL a las dos primeras para que las puedas leer como JSON. Es una herramienta a la que recurres constantemente cuando depuras flujos de login, autorización, claims de sesión o problemas con la expiración del token.

Decodificar un JWT *no* significa confiar en él. El header y el payload son legibles a propósito: solo están codificados en Base64URL, no cifrados. La verificación es lo que comprueba que el token fue firmado por quien tú esperas y que nadie lo ha manipulado.

Un JWT tiene la forma header.payload.signature. Cada parte va codificada en Base64URL y se separan con puntos. El header indica qué algoritmo de firma se usa, el payload contiene los claims (quién es el usuario, cuándo expira el token, qué puede hacer) y la firma le permite al servidor demostrar que el token no fue modificado.

Qué vas a aprender decodificando JWTs

  • Un JWT tiene tres partes codificadas en Base64URL separadas por puntos: header.payload.signature.
  • Los claims típicos como sub, role, iat, nbf y exp indican identidad, permisos, hora de emisión y hora de expiración.
  • Un payload decodificado puede modificarlo cualquiera; lo único que permite al servidor detectar manipulaciones es la firma.

Cómo decodificar un JWT paso a paso

  1. Pega el token completo

    Pega el JWT en el cuadro de entrada. Debería verse como xxxx.yyyy.zzzz: tres partes codificadas en Base64URL unidas por puntos.

  2. Lee el header

    El header te dice el algoritmo de firma (alg) y el tipo de token. Cuidado con "alg": "none": significa que el token no está firmado y no se puede confiar en él.

  3. Lee los claims del payload

    El payload es el JSON con todos los claims. Fíjate en sub (id de usuario), exp (expiración), iat (emitido en) y cualquier claim personalizado que añada tu app, como role o tenant.

  4. Comprueba la expiración

    Convierte el timestamp Unix de exp a una fecha: si ya pasó, el token está caducado y cualquier API que se comporte bien lo va a rechazar.

  5. Verifica la firma (opcional)

    Si tienes el secreto o la clave pública, pégalo en el verificador para confirmar que la firma es válida. Solo puedes confiar en el contenido del token cuando la firma cuadra.

Claims estándar de JWT

Estos son los claims registrados que define la especificación de JWT (RFC 7519). Cualquier aplicación puede añadir además sus propios claims personalizados.

ClaimNombreSignificado
issIssuer (emisor)Quién creó y firmó el token
subSubject (sujeto)A quién hace referencia el token, normalmente un id de usuario
audAudience (audiencia)A quién va dirigido el token
expExpiration (expiración)Timestamp Unix a partir del cual el token deja de ser válido
nbfNot Before (no antes de)El token no debe aceptarse antes de este momento
iatIssued At (emitido en)Cuándo se creó el token
jtiJWT IDIdentificador único, útil para revocar tokens
algAlgoritmo (header)Algoritmo de firma: HS256, RS256, ES256, …

Ejemplos de JWT para probar

Inspeccionar un JWT típico

Token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsInJvbGUiOiJzdHVkZW50IiwiZXhwIjoxNzEwMDAwMDAwfQ.Q3hH8yzqI2OsHJ1Lyj8jJfJPa5ZpIVlh1FhJpJbqMcs

Header
{  "alg": "HS256",  "typ": "JWT"}
Payload
{  "sub": "user_123",  "role": "student",  "exp": 1710000000}

El header indica HS256 (un algoritmo con secreto compartido). El payload identifica al usuario, su rol y cuándo expira el token. La firma es la tercera parte. (Este es un token de muestra para fines didácticos: la firma no se va a validar contra ningún secreto real).

Comprobar si un token está caducado

Claim del payload
{  "exp": 1710000000}

exp es un timestamp Unix en segundos. Conviértelo a fecha: si ya pasó, el token está caducado y un backend correcto lo va a rechazar.

Detectar el peligroso algoritmo "none"

Header
{  "alg": "none",  "typ": "JWT"}

Si un servidor acepta "alg": "none", un atacante puede forjar cualquier payload sin necesidad de firma. En producción, este header siempre se rechaza.

Errores comunes con JWT

  • Meter contraseñas, secretos o datos personales sensibles en el payload. Los JWT son legibles, no están cifrados.
  • Decodificar un token y dar por hecho que es válido sin verificar la firma.
  • Confundir el hecho de que Base64URL sea legible con que esté cifrado: los payloads de JWT son fáciles de leer a propósito.

Preguntas frecuentes sobre JWT

¿Qué es un JWT?
JWT son las siglas de JSON Web Token. Es un formato de token compacto, firmado y seguro para usar en URLs que sirve para transportar claims entre dos partes; típicamente entre un servidor y un navegador para representar a un usuario autenticado.
¿Cómo decodifico un JWT?
Pega el token en un decodificador de JWT, o pártelo por los puntos y aplica Base64URL a las dos primeras partes. El header y el payload aparecen como JSON; la tercera parte es la firma.
¿Cómo sé si un JWT está caducado?
Mira el claim exp del payload. Es un timestamp Unix en segundos. Si la hora actual es mayor que exp, el token está caducado.
¿Cualquiera puede decodificar un JWT?
Sí. El header y el payload están codificados en Base64URL, no cifrados. La firma solo demuestra que el token no ha sido manipulado, no oculta su contenido.
¿Qué significa verificar un JWT?
Verificar consiste en recalcular la firma usando el secreto o la clave pública esperados y compararla con la firma que trae el token. Si coinciden, el payload es fiable y no ha sido modificado.
¿Puedo guardar contraseñas dentro de un JWT?
No. Cualquiera que tenga el token puede leer el payload. Guarda solo identificadores y claims no sensibles, y apóyate en expiraciones cortas más refresh tokens para la seguridad.

Más información

Otras herramientas para desarrolladores

Aprende a programar con Coddy

COMENZAR