Un JSON Web Token parece un bloque sólido de ruido, pero en realidad son tres piezas legibles pegadas con puntos — y la pieza del medio, el payload, es JSON simple que cualquiera que tenga el token puede leer. Este decodificador JWT hace esa lectura por ti: pega un token y separa las tres partes, decodifica en base64url la cabecera y el payload, muestra ambos como JSON con formato y convierte las afirmaciones de tiempo estándar (exp, iat, nbf) de números Unix a fechas humanas, para que veas de un vistazo cuándo se emitió un token y cuándo caduca. La parte de la firma se muestra tal cual, por completitud. Un hecho está impreso en la propia herramienta porque importa: esto es un decodificador, no un verificador — no comprueba la firma, y un payload legible nunca es prueba de que un token sea genuino. Depurar, en cambio, es justo para lo que sirve decodificar: comprobar qué usuario dice ser un token, por qué caducó una sesión o qué te envió realmente una API. El ejemplo cargado arriba es el famoso token de demostración de jwt.io, y todo funciona en tu navegador, así que los tokens reales que pegues nunca salen de tu máquina.
Anatomía del token de arriba
El ejemplo precargado es el JWT más conocido del mundo, el token de demostración de jwt.io. Su cabecera se decodifica como {"alg": "HS256", "typ": "JWT"}: el algoritmo de firma es HMAC-SHA256 y el tipo es JWT. Su payload se decodifica como {"sub": "1234567890", "name": "John Doe", "iat": 1516239022} — sujeto 1234567890, una afirmación de nombre y una hora de emisión que la herramienta convierte a 2018-01-18T01:30:22Z. La tercera parte es la firma, una cadena base64url calculada sobre las dos primeras partes con una clave secreta. Fíjate en lo que no está: no hay afirmación exp, así que este token nunca caduca por sí mismo. Decodificar cualquier token sigue el mismo camino: separar por los puntos, decodificar en base64url (el alfabeto seguro para URL usa – y _ y omite el relleno) y analizar el JSON. Si un token falla aquí, está mal formado o no es un JWT en absoluto; si decodifica, estás mirando afirmaciones, no hechos — la distinción de la que trata la siguiente sección.
Decodificar no es verificar — y por qué está bien
Verificar significa recalcular la firma con la clave del emisor y comprobar que coincide, además de hacer cumplir las afirmaciones (caducidad, audiencia, emisor). Solo el sistema que guarda la clave puede hacerlo, y por eso la verificación de verdad pertenece a tu servidor, nunca a una herramienta de navegador: una página web que «verificara» un token con una clave que pegaste sería un sitio extraño donde poner un secreto de producción. Lo que la decodificación te da es visibilidad, y la visibilidad es lo que la mayoría del trabajo con tokens necesita en realidad: tickets de soporte («la app dice sesión caducada» — comprueba el exp), errores de integración (una afirmación de audiencia equivocada, un desfase de reloj entre el iat y el servidor) e inspeccionar lo que te emitió una API de terceros. El movimiento inseguro es el contrario: confiar en un payload porque se decodificó bonito, por ejemplo dejar que una afirmación de rol del lado del cliente conceda acceso. Decodifica con libertad para depurar; verifica en el servidor para seguridad. La herramienta lo dice en su propia cara para que el hábito se quede.
Cómo leer las afirmaciones estándar
Algunas claves del payload están estandarizadas (RFC 7519) y vale la pena reconocerlas: iss el emisor, sub el sujeto (normalmente el ID de usuario), aud la audiencia prevista, exp la hora de caducidad, nbf «no válido antes de», iat «emitido en» y jti un ID único del token. Las tres afirmaciones de tiempo son segundos Unix, y por eso la herramienta las convierte a fechas ISO: 1516239022 no le dice nada a un humano de un vistazo, y lo dice todo cuando se lee 2018-01-18. Si un token parece caducar pronto o tarde, compara exp con iat: la diferencia es la vida útil prevista, y un desajuste con lo que configuraste suele apuntar a los valores por defecto de la librería emisora más que a este decodificador. Todo lo demás en el payload son afirmaciones propias de la aplicación, que la vista JSON muestra tal cual.
Preguntas frecuentes
¿Esta herramienta puede verificar la firma de un token?
No, a propósito. La verificación necesita el secreto o la clave pública del emisor y pertenece a un servidor. Esta herramienta decodifica y muestra; la firma se enseña pero nunca se comprueba, y la herramienta lo dice.
¿Es seguro pegar un token de acceso real?
La decodificación ocurre por completo en tu pestaña del navegador: no se envía ni se guarda nada. Aun así, los tokens son credenciales: el buen hábito es tratarlos como contraseñas, usar la herramienta para depurar y cerrar la pestaña después.
¿Por qué mi token no se decodifica?
Normalmente por una de tres razones: no es un JWT (los tokens de sesión opacos no decodifican a nada con sentido), se truncó al copiarlo (un carácter que falta corrompe el JSON) o una parte no es base64url/JSON válido. El mensaje de error te dice en qué etapa falló.
¿Qué significa alg “none” en una cabecera?
Un token sin firmar. Legítimo en unos pocos contextos estrechos, peligroso si una API lo acepta donde se esperaba un token firmado — ese error de aceptación es una vulnerabilidad JWT clásica, y ver “none” aquí es un buen motivo para revisar el lado del servidor.
Herramientas relacionadas
English version: JWT Decoder Tool — Read JWT Headers and Payloads Safely Online. También te puede interesar: Codificador y Decodificador Base32 — Base32 RFC 4648 en tu Navegador · Descriptor de Expresiones Cron — Qué Significa Cada Línea Crontab en Español Claro.
Inserta esta herramienta en tu web — gratis
Copia el código de abajo para añadir esta herramienta funcional a tu propia página. Solo pedimos que mantengas el pequeño enlace de crédito que la acompaña.
