PK Systems
Codificadores y decodificadores

Decodificador de JWT

Inspecciona el header y el payload de un JSON Web Token. La verificación no se hace a propósito — esta herramienta es solo para depurar.

Decodificador de JWT

Los tokens dan acceso — nunca pegues un JWT de producción en una herramienta en la que no confías. Esta página corre íntegra en tu navegador, pero por costumbre, decodifica tokens no fiables en local.

Decodificado

Header


            

Payload


                
            

Firma


                

La firma se muestra en base64url. Esta herramienta no verifica la firma — para eso hace falta el secreto o la clave pública del emisor.

¿Qué es un JWT?

Un JSON Web Token (JWT, se pronuncia "yot") es una forma compacta y apta para URLs de transportar JSON firmado entre partes — habitualmente entre un servidor de autenticación y tu aplicación. Un JWT tiene tres partes en base64url separadas por puntos: header.payload.firma. El header indica qué algoritmo de firma se usó; el payload es un JSON con claims (sujeto, caducidad, datos personalizados); la firma permite al receptor comprobar que el token no se manipuló. El estándar está en la RFC 7519.

Cómo usarla

Pega un JWT en el cuadro de arriba. La herramienta separa por los puntos, decodifica los dos primeros segmentos en base64url y formatea el JSON resultante en dos paneles — Header y Payload. El tercer panel muestra la firma en bruto. Si el payload tiene iat, nbf o exp, también se muestran como timestamps UTC legibles indicando si el token ha caducado. La decodificación es en vivo: en cuanto terminas de escribir, los paneles se actualizan.

Decodificado ≠ verificado

Un decodificador de JWT es una ayuda de depuración, no una herramienta de seguridad. Cualquiera puede decodificar un JWT — la codificación es reversible por diseño. Lo que hace fiable al token es la firma, y verificar la firma requiere el secreto del emisor (HS256) o su clave pública (RS256, ES256). Nunca confíes en el contenido de un JWT en código de producción sin verificar antes su firma. Usa la biblioteca de JWT que viene con tu framework; nunca la implementes desde cero.

Claims estándar de JWT

Claim Nombre Significado
issEmisorIdentifica quién emitió el token (p. ej. la URL del servidor de auth).
subSujetoIdentifica al sujeto al que se refiere el token — normalmente un ID de usuario.
audAudienciaA quién va dirigido el token. Los receptores deben rechazar tokens que no son para ellos.
expCaducidadTimestamp Unix tras el cual el token no debe aceptarse.
nbfNo antesTimestamp Unix antes del cual el token no se puede aceptar.
iatEmitido enTimestamp Unix en el que se emitió el token.
jtiID del JWTIdentificador único del token, útil para listas de revocación.

Preguntas frecuentes

¿Mi JWT se envía a algún sitio?
No. La decodificación se ejecuta entera en tu navegador — el token no sale de tu dispositivo. Puedes comprobarlo abriendo DevTools > Network y pegando un token; no se dispara ninguna petición. Aun así, trata cualquier JWT de producción como una credencial: solo pega tokens que no te importe ver en el historial del navegador.
¿Por qué esta herramienta no verifica la firma?
Verificar requiere el secreto del emisor (para HS256) o su clave pública (para RS256, ES256, etc.). Pedir al usuario que pegue secretos de producción en una página web es una receta para el desastre, así que la herramienta no ofrece esa opción a propósito. Usa la biblioteca de JWT de tu aplicación o una CLI como jwt para verificar firmas en un entorno controlado.
Sale "No es un JWT" — ¿qué pasa?
Un JWT válido tiene exactamente tres segmentos separados por punto. Causas habituales: espacios extra o un prefijo Bearer arrastrado de un header HTTP (quítalo), solo se pegó el payload (necesitas también header y firma), o el token es en realidad un JWE (cifrado) que tiene cinco segmentos y no se puede decodificar sin la clave privada del destinatario.
¿Por qué el payload es base64url y no base64 normal?
Base64 estándar usa +, / y el relleno = — ninguno de los tres es seguro en URL. Base64url sustituye + por -, / por _ y elimina el relleno. Así el resultado puede ir en una URL o cabecera HTTP sin más escape. Este decodificador convierte de vuelta a base64 estándar antes de llamar a atob del navegador.
¿Qué significa alg: none?
Significa que el JWT no está firmado — cualquiera puede crear un token con cualquier payload. alg: none existe en la especificación pero es peligroso en la práctica: hay una clase famosa de vulnerabilidades que explotaba librerías que aceptaban tokens con alg: none como si estuvieran firmados. Si lo ves en un token de producción, considéralo un hallazgo serio.
¿Es seguro compartir un JWT para depurar?
En general, no. Los JWT son bearer tokens — quien los posee tiene los derechos que representan hasta que caduquen (o se revoquen, si el emisor mantiene una lista de revocación). Comparte una captura del payload decodificado en lugar del token en bruto, o pide al emisor que emita un token de depuración corto y con alcance reducido. Nunca pegues tokens de producción en chats, emails o herramientas de terceros.