Qué hay dentro de un JWT y cómo leerlo
Aprende a leer un token a mano, qué campos mirar primero y cuál es el límite entre leer un JWT y confiar en él.
Un JWT (JSON Web Token) es una cadena con tres partes separadas por puntos: cabecera, carga útil y firma. Las dos primeras son JSON codificado en Base64URL, así que cualquiera puede leerlas; la tercera permite comprobar que nadie las modificó. Con el decodificador de JWT pegas el token y ves cada parte, su fecha de caducidad y los avisos, sin que el token salga de tu navegador. Lo importante: leer un JWT no es lo mismo que comprobar que es válido.
¿Cómo es un JWT por dentro?
Tiene la forma xxxxx.yyyyy.zzzzz. Cada parte cumple una función:
| Parte | Qué contiene | Se puede leer |
|---|---|---|
| Cabecera (header) | El algoritmo de firma (alg) y el tipo (typ) | Sí, está solo codificada |
| Carga útil (payload) | Los datos, llamados claims, como quién es el usuario y cuándo caduca | Sí, está solo codificada |
| Firma (signature) | Una huella que prueba que cabecera y carga no cambiaron | Es binaria, no se lee |
Base64URL es una variante de Base64 que usa - y _ en lugar de + y /. Es una codificación, no cifrado: por eso cualquiera puede leer el contenido. Si la diferencia no te queda clara, mira qué es Base64 y por qué no es cifrado. El formato está definido en el RFC 7519.
Los claims que conviene mirar primero
iss: quién emitió el token.sub: a quién se refiere, normalmente un identificador de usuario.aud: para quién está pensado.exp: cuándo caduca, en segundos desde el 1 de enero de 1970 (hora Unix).nbf: desde cuándo es válido.iat: cuándo se emitió.
Las fechas son números, no fechas legibles. El decodificador las convierte y te avisa si el token ya caducó o todavía no es válido. Para convertir por tu cuenta un número a fecha, usa el conversor de timestamp, y entiende por qué existe en el timestamp Unix y el problema del 2038.
Cómo leer un JWT paso a paso
- Abre el decodificador de JWT y pega el token. Si le faltan partes, la herramienta avisa de que debe tener tres.
- Mira la cabecera: el algoritmo (
alg) te dice cómo se firmó. - Mira la carga: revisa
exp,iss,suby cualquier dato propio de la aplicación. - Lee los avisos. La herramienta marca con alta severidad un token con
alg: none(sin firma, así que cualquiera pudo fabricarlo), y avisa si caducó o si su fecha de inicio todavía no llegó. - Si conoces el secreto de un token HS256, HS384 o HS512, puedes pegarlo y pulsar Verificar para comprobar la firma. Se hace en tu navegador. Con un secreto de menos de 32 caracteres, la herramienta te recuerda que los secretos HS256 cortos son fáciles de romper por fuerza bruta.
Pruébalo con un token de ejemplo
Este token es de demostración, no pertenece a ningún sistema y se firmó con un secreto inventado:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTQyIiwiaXNzIjoiZWplbXBsby50ZXN0IiwiaWF0IjoxNzkwMDAwMDAwLCJleHAiOjE3OTAwMDM2MDB9.h0JpMtcLygUE312VrCShXYpl49a4q6lGtd_1dgjN264Pégalo en el decodificador. La cabecera dice {"alg":"HS256","typ":"JWT"} y la carga trae sub: user-42, iss: ejemplo.test, iat: 1790000000 y exp: 1790003600. Ese exp corresponde al 21 de septiembre de 2026 a las 15:13 UTC, así que la herramienta lo marcará como caducado: es justo el aviso que verías con un token real vencido. Si pegas como secreto secreto-de-ejemplo-de-al-menos-32-caracteres y pulsas Verificar, la firma sale válida. Cambia una sola letra del secreto y saldrá inválida.
Leer no es verificar
Esta es la confusión más cara. Decodificar un JWT solo muestra lo que dice. No demuestra que lo haya emitido quien dice haberlo emitido, ni que nadie lo modificara. Eso lo comprueba la firma, y la comprueba el servidor que lo recibe con la clave correcta. Un token con la firma inválida puede tener un payload perfectamente legible.
Un límite de la herramienta: la verificación automática cubre los algoritmos HS (con secreto compartido). Para tokens firmados con RSA (RS256 y similares) no la hace y te lo indica; ahí verifica la firma en tu backend con la clave pública.
Husos horarios y relojes
Los números de exp, nbf e iat cuentan segundos desde un momento fijo en UTC, así que no llevan huso horario. Solo la presentación depende de dónde estés, y por eso el mismo token puede verse con horas locales distintas para dos personas. A su vez, el servidor compara esos valores con su propio reloj: si el reloj de una máquina está desfasado, puede rechazar un token recién emitido o aceptar uno vencido. Cuando un token falle sin razón aparente, compara los relojes antes que nada.
Qué no poner en un JWT
Como el payload se lee sin clave, no pongas contraseñas ni datos sensibles que no quieras que vea quien tenga el token. Y trata el token como una credencial: quien lo tenga puede usarlo hasta que caduque. Pegar un token real de producción en un sitio desconocido es un riesgo, y por eso conviene usar una herramienta que lo procese localmente. Si te interesa ese ángulo, lee por qué importa la privacidad al formatear JSON.
Preguntas frecuentes
¿Qué es un JWT?
Un JSON Web Token es una cadena de tres partes separadas por puntos, cabecera, carga útil y firma, que se usa para transmitir información verificable entre sistemas, como la identidad de un usuario ya autenticado.
¿Se puede leer el contenido de un JWT?
Sí. La cabecera y la carga están codificadas en Base64URL, no cifradas, así que cualquiera con el token puede leerlas. Por eso no debe llevar datos secretos.
¿Decodificar un JWT prueba que es válido?
No. Solo muestra su contenido. La validez depende de verificar la firma con la clave correcta, además de comprobar la caducidad y el emisor.
¿Qué significa exp en un JWT?
Es la fecha de caducidad, expresada en segundos desde el 1 de enero de 1970. Pasado ese momento el token no debe aceptarse.
¿Qué es alg none?
Un token que declara no tener algoritmo de firma. No tiene firma, así que cualquiera pudo fabricarlo. Un servidor correctamente configurado debe rechazarlo.
¿Se envía mi token a algún servidor?
No. La lectura y la verificación ocurren en tu navegador.
Lee tu JWT en el navegador
Header, payload, caducidad y avisos, y verificación de firma HS256, HS384 y HS512. 100% local, gratis y sin registro.
Abrir Decodificador JWT →Herramientas relacionadas
- Decodificador JWT: header, payload, caducidad y verificación HS256, HS384 y HS512.
- Base64: codifica y decodifica, la base de cada parte de un JWT.
- Conversor de timestamp: convierte exp, nbf o iat a una fecha legible.
- Formateador JSON: da formato al payload para leerlo mejor.
También te puede interesar: mejores herramientas para developers 2026, subiste una API key a GitHub: guía de emergencia, UUID v4 o v7: cuál usar como identificador y Cómo crear una contraseña segura, con cuentas.