JWT decode online: decodifica el header, el payload y la expiración de un JSON Web Token
Pega un token JWT en el cuadro de arriba y el decodificador lo separa por los puntos, decodifica el header y el payload desde Base64url y los muestra como JSON con sangría. Debajo del payload aparecen las claims de tiempo `exp`, `nbf` e `iat` convertidas a fechas UTC legibles, con el estado del token: `(EXPIRED)` si ya caducó, `(not expired)` si sigue vigente y `(not yet valid)` si `nbf` todavía está en el futuro. Todo ocurre en tu navegador: el token no se envía a ningún servidor, algo importante porque un JWT suele ser una credencial activa.
Qué es un token JWT y qué verás al decodificarlo
Un JSON Web Token (RFC 7519) es un texto con tres partes separadas por puntos: header, payload y firma. Las dos primeras son JSON codificado en Base64url, no cifrado; la tercera son los bytes de la firma. Por eso casi todos los tokens empiezan por eyJ: es lo que produce Base64 al codificar {" seguido de una letra.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiJ1c3JfNDgyMSIsIm5hbWUiOiJNYXLDrWEgTMOzcGV6Iiwicm9sIjoiZWRpdG9yIiwiaWF0IjoxNzkwMDAwMDAwLCJleHAiOjE3OTAwMDM2MDB9
.GmGkI9ANxLJmFhpo2eqFfcMCNfpaRWtu7COhVmqWUfc
Header { "alg": "HS256", "typ": "JWT" }
Payload { "sub": "usr_4821", "name": "María López", "rol": "editor",
"iat": 1790000000, "exp": 1790003600 }
exp: 2026-09-21T15:13:20.000Z (EXPIRED)
iat: 2026-09-21T14:13:20.000Z
El header indica el algoritmo de firma (alg, por ejemplo HS256 o RS256) y a veces un kid, el identificador de la clave pública con la que el servidor debe comprobar la firma. El payload contiene las claims: quién emitió el token, a quién se refiere, para qué API es válido, cuándo caduca y los datos propios de la aplicación, como roles o permisos. El decodificador interpreta el payload como UTF-8, así que nombres con tildes o eñes se leen bien.
Las claims registradas
RFC 7519 define siete nombres de claim registrados. Ninguno es obligatorio, pero los proveedores de identidad suelen usarlos todos:
iss emisor quién creó y firmó el token (tu proveedor de identidad)
sub sujeto el usuario o cliente al que se refiere
aud audiencia la API o aplicación a la que va dirigido
exp expiración momento a partir del cual el token debe rechazarse
nbf no antes de momento anterior al cual el token debe rechazarse
iat emitido en momento en que se creó
jti ID del token identificador único, útil para detectar reutilización
Los tiempos son NumericDate: segundos desde 1970, no milisegundos. Si una fecha convertida cae en enero de 1970 o miles de años en el futuro, quien generó el token usó la unidad equivocada. Los ID tokens de OpenID Connect añaden claims como email, name o nonce, y proveedores como Auth0, Keycloak o Azure AD suman las suyas.
Token JWT expirado: cómo interpretarlo
La causa más habitual de un 401 con JWT es que el token caducó. El decodificador compara exp con el reloj de tu equipo y marca (EXPIRED) cuando ya pasó. Los access tokens suelen durar de minutos a una hora, así que un token copiado de los logs de ayer casi seguro estará expirado.
Si el token no ha caducado según esta página y aun así el servidor lo rechaza, revisa nbf y la hora de los servidores: una diferencia de reloj de unos minutos basta para que un token recién emitido parezca del futuro. Muchas librerías admiten un margen de tolerancia (leeway o clockTolerance) para ese caso. Revisa también aud e iss, que el servidor compara con su configuración.
Decodificar no es verificar
Cualquiera puede decodificar un JWT sin la clave, porque el contenido solo está codificado. Por eso un payload decodificado no demuestra nada: un atacante puede cambiar "rol": "editor" por "rol": "admin", volver a codificarlo y el token se seguirá decodificando perfectamente. Solo la verificación de la firma detecta el cambio.
Usa el decodificador para depurar. Antes de confiar en una claim dentro de tu aplicación, verifica la firma con el secreto o la clave pública y comprueba exp, nbf, iss y aud con una librería mantenida: jsonwebtoken o jose en Node.js, PyJWT en Python, firebase/php-jwt en PHP o JJWT en Java. Para comprobar una firma a mano, pega el token y la clave en el validador de JWT del sitio.
Decodificar un JWT en JavaScript, Python y PHP
Leer el payload en código es útil para registrar datos o para renovar el token en el cliente antes de que expire:
// JavaScript (navegador o Node.js 16+)
const payload = JSON.parse(new TextDecoder().decode(Uint8Array.from(
atob(token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')), (c) => c.charCodeAt(0))));
# Python, PyJWT: leer sin verificar (solo para depurar)
jwt.decode(token, options={"verify_signature": False})
// PHP
$payload = json_decode(base64_decode(strtr(explode('.', $token)[1], '-_', '+/')), true);
El paso con TextDecoder no es decorativo: atob devuelve bytes sueltos, y sin él López aparece como López. En cualquier lenguaje, la regla es la misma: esto sirve para leer, nunca para autorizar.
Cuando el token no se puede decodificar
Si pegas algo con menos de dos partes, el decodificador avisa de que un JWT necesita al menos header y payload; normalmente el token se cortó al copiarlo. Si el header de autorización trae el prefijo Bearer , quítalo: no forma parte del token. Un token con cinco partes es un JWE, un JWT cifrado cuyo contenido no se puede leer sin la clave de descifrado.
Si el resultado es un error de JSON, puede que no sea un JWT: algunos proveedores emiten access tokens opacos, cadenas aleatorias que solo el servidor emisor sabe interpretar.
Privacidad del token
Un token válido permite actuar en nombre del usuario hasta que caduca. No pegues tokens de producción en herramientas que los envían a un servidor, ni en tickets o chats. Esta página los decodifica localmente y no los guarda. Recuerda también que el payload lo puede leer cualquiera que tenga el token, así que no pongas contraseñas ni datos sensibles en las claims.
Frequently asked questions
¿Cómo decodificar un JWT online?
Pega el token completo en el cuadro del decodificador. El header y el payload aparecen como JSON, y las claims exp, iat y nbf se muestran como fechas UTC con el estado del token.
¿Se puede decodificar un JWT sin la clave secreta?
Sí. El header y el payload están en Base64url, no cifrados, así que se leen sin ninguna clave. La clave solo hace falta para verificar la firma.
¿Decodificar un JWT sirve para validarlo?
No. Decodificar solo muestra el contenido, y un token manipulado se decodifica igual de bien. Verifica la firma y las claims exp, iss y aud antes de confiar en él.
¿Cómo sé si un token JWT está expirado?
Mira la claim exp, un tiempo Unix en segundos. El decodificador la convierte en fecha y añade EXPIRED si ya pasó según el reloj de tu equipo.
¿Qué es JWT y para qué sirve?
JSON Web Token es un formato estándar para transmitir claims firmadas entre dos partes. Se usa sobre todo como access token o ID token en APIs, OAuth 2.0 y OpenID Connect.
¿Es seguro pegar mi token aquí?
Sí: la decodificación ocurre en esta pestaña y el token no viaja a ningún servidor. El riesgo suele estar en otra parte: un token vigente pegado en un ticket, un chat o una captura de pantalla permite actuar como ese usuario hasta que caduque.