Seguridad
Decodificador de JWT
Lee el header y el payload de un JWT en tu navegador, con comprobación opcional de la firma si aportas la clave.
Qué es y para qué sirve
Un JWT (JSON Web Token) es la forma más usada de empaquetar una identidad o un permiso para que viaje entre sistemas: un servidor lo firma una vez y cualquiera puede leerlo después sin tener que preguntarle nada a ese servidor. Tiene tres partes separadas por puntos: un header con el algoritmo usado, un payload con los datos (a quién identifica, cuándo expira, qué puede hacer) y una firma que certifica que las dos primeras no se han tocado desde que se firmaron. Header y payload van solo en base64url, no cifrados: cualquiera que tenga el token puede leer su contenido con un decodificador como este, sin necesitar ninguna clave.
Ese último punto es el que más se malentiende, y por eso esta herramienta lo repite en la propia página: decodificar no es lo mismo que validar. Leer el contenido no exige ninguna clave porque no está protegido de la lectura, solo de la manipulación. Comprobar que la firma es legítima —que ese payload lo generó de verdad quien dice haberlo generado y no se ha tocado ni una coma— exige el secreto con el que se firmó (si es HMAC) o la clave pública correspondiente (si es RSA o ECDSA), y ningún decodificador sin servidor tiene esa clave por defecto. Un JWT copiado de un sitio y pegado en otro se lee exactamente igual de bien esté o no manipulado; la firma es lo único que distingue uno legítimo de uno fabricado a mano.
Esta página decodifica el token entero en el navegador y, si tú sí conoces el secreto o tienes la clave pública, deja comprobar la firma también en el navegador con la API criptográfica nativa (Web Crypto): la clave no sale de tu equipo en ningún momento.
Casos de uso
- Ver qué datos lleva de verdad el token de sesión de una aplicación mientras se depura un problema de login.
- Comprobar la fecha de expiración exacta de un token que un usuario dice que «ya no funciona».
- Revisar los permisos (scopes, roles) que un token de una API concede antes de usarlo.
- Comprobar en una auditoría si un servicio está emitiendo tokens con «alg: none», un fallo de seguridad conocido.
- Verificar, con tu propia clave, que un token que has recibido lo emitió de verdad tu servidor y no ha sido manipulado.
- Enseñar en una clase o en una charla la diferencia entre codificar y cifrar, con un ejemplo real delante.
Cómo se usa
- Pega el JWT completo, o pulsa «Ejemplo» para probar con uno.
- El header y el payload se decodifican al momento, con los claims estándar (emisor, expiración, audiencia…) traducidos debajo.
- Si el token ha expirado o aún no es válido, se marca junto a la fecha correspondiente.
- La firma se enseña tal cual viene, con el aviso de que no se ha comprobado nada todavía.
- Si tienes el secreto (para HS256/384/512) o la clave pública en PEM (para RS256/384/512 o ES256/384), pégala y pulsa «Comprobar firma» para verificarla en el propio navegador.
Qué incluye Decodificador de JWT
- Decodificación de header y payload sin necesitar ninguna clave, porque un JWT no cifra su contenido.
- Detección de los claims estándar de la RFC 7519 (iss, sub, aud, exp, nbf, iat, jti), traducidos y con la fecha ya calculada.
- Aviso automático si el token ya expiró o si todavía no es válido (nbf en el futuro).
- Aviso destacado cuando el algoritmo es «none»: el token no lleva firma real.
- Verificación opcional de la firma en el navegador para HS256/384/512 (con el secreto) y RS256/384/512 y ES256/384 (con la clave pública en PEM), usando Web Crypto.
- Detecta si lo pegado es en realidad un JWE (token cifrado, 5 partes) y explica por qué no se puede leer.
- Nada de lo que pegues, ni el token ni la clave con la que lo compruebes, sale de tu navegador.
Preguntas frecuentes
- ¿Por qué puedo leer el contenido de un JWT sin ninguna clave?
- Porque un JWT normal no está cifrado, solo codificado en base64url y firmado. La firma protege contra la manipulación, no contra la lectura: cualquiera con el token puede ver exactamente los mismos datos que ves aquí, sea o no el destinatario legítimo. Si necesitas que el contenido no se pueda leer, lo que hace falta es un JWE, que es otro formato (con 5 partes en vez de 3) y que esta herramienta no puede decodificar sin la clave de descifrado.
- Entonces, ¿de qué sirve la firma si el contenido se lee igual?
- Sirve para que quien reciba el token pueda confiar en que ese payload lo generó de verdad quien dice haberlo generado, y que nadie lo ha tocado por el camino. Sin comprobar la firma, un atacante podría cambiar «rol: usuario» por «rol: admin» y pegar cualquier cosa como firma; el servidor que sí tiene la clave rechazaría ese token al momento porque la firma ya no coincidiría con el contenido modificado.
- ¿Por qué esta página no valida la firma automáticamente?
- Porque validar exige la clave con la que se firmó, y esta página no tiene servidor ni la guarda en ningún sitio: es justo la promesa de todo este proyecto. Si el token es HMAC (HS256/384/512) necesitas el secreto; si es RSA o ECDSA (RS*/ES*) necesitas la clave pública correspondiente. Si las tienes, puedes pegarlas en el apartado «Firma» y la comprobación se hace igualmente en tu navegador, con Web Crypto, sin que la clave salga de tu equipo.
- ¿Qué significa que el algoritmo sea «none»?
- Que el token no lleva firma real: la tercera parte va vacía o es irrelevante. Es un valor legítimo de la especificación pensado para casos muy concretos, pero aceptarlo en un servidor de producción es una vulnerabilidad conocida y explotada: basta con poner «alg: none» en el header para que cualquiera pueda fabricar un token con el contenido que quiera. Si ves esto en un token que no esperabas, es una señal de alarma.
- ¿Puedo verificar cualquier algoritmo aquí?
- Los más comunes: HS256, HS384, HS512 con un secreto, y RS256, RS384, RS512, ES256 y ES384 con una clave pública en formato PEM. Algoritmos menos frecuentes como PS256 o EdDSA no están soportados todavía para la verificación, aunque el contenido se decodifica igual de bien.
- ¿Se envía mi token o mi clave a algún servidor?
- No. Todo —decodificar y, si lo pides, verificar— ocurre en tu navegador. Esta página no tiene backend al que mandar nada, así que ni el token ni el secreto ni la clave pública salen de tu equipo en ningún momento.
Privacidad
Decodificador de JWT funciona íntegramente en tu navegador. No hay servidor detrás: los datos que introduces no se envían a ninguna parte y desaparecen al cerrar la pestaña.