JWT Decoder

Decodificador / Codificador JWT

Decodifica cualquier JSON Web Token para ver su cabecera, payload y firma — o firma uno nuevo con HS256/384/512. Verifica firmas HMAC localmente. 100% en tu navegador.

Decodificador / Codificador JWT — TL;DR

Decodifica cualquier JSON Web Token para ver su cabecera, payload y firma — o firma uno nuevo con HS256/384/512. Verifica firmas HMAC localmente. 100% en tu navegador.

No. Toda la herramienta es JavaScript dentro de esta página. Pegas un token, la decodificación ocurre en tu navegador y los bytes nunca salen de la pestaña. Abre DevTools → Red y compruébalo — no se envían peticiones durante decodificar o verificar. Eso lo hace seguro para pegar tokens reales de clientes o producción.

Demuestra que el token fue firmado por alguien que posee el secreto (HMAC) o la clave privada (RSA/ECDSA). NO cifra el payload — la cabecera y el payload son simplemente JSON codificado en base64url, cualquiera con el token puede leerlos. La firma sólo evita la manipulación: si cambias un solo byte del payload, la firma deja de coincidir.

Un JWT a menudo lleva el ID de usuario, el correo, los scopes y a veces el equivalente a las cookies de sesión — exactamente los datos que NO debes pegar en el servidor de un desconocido. El decodificador de iKit se ejecuta como JavaScript ya cargado en tu pestaña del navegador. Verificable en DevTools → Red: ningún fetch, ningún XHR, ningún beacon durante decodificar o verificar.

Cabecera

Payload

Firma

Claims estándar


            

Verificar firma HMAC

Para tokens HS256/384/512, escribe el secreto de firma para verificar la firma localmente. Para RS256/ES256 (RSA/ECDSA), usa una librería del lado servidor — la verificación con clave pública requiere un archivo PEM que aquí no aceptamos.

Por qué iKit Decodificador JWT

La forma más rápida de depurar un JWT — sin subidas, sin registro, sin terceros entre tú y tu token.

Tres paneles, un pegado

Pega un JWT y verás la cabecera, el payload y la firma decodificados uno al lado del otro. Los claims estándar (iss, sub, aud, exp, iat) aparecen con marca temporal y etiquetados.

Verificación HMAC local

Para tokens HS256/384/512, escribe el secreto para verificar la firma usando la API Web Crypto del navegador. El secreto nunca sale de tu pestaña.

Firma tus propios tokens

Cambia al modo Codificar, edita la cabecera y el payload como JSON, elige el algoritmo, escribe un secreto y obtén un token firmado al instante.

Privacidad por diseño

Los payloads de un JWT contienen IDs de usuario, correos, a veces scopes — nunca los pegues en una herramienta de servidor. El decodificador de iKit se ejecuta como JavaScript en tu navegador. Verificable en DevTools → Red.

Conciencia de expiración

Los claims estándar como exp, nbf, iat se resaltan con fechas legibles y una insignia clara EXPIRADO / válido para que sepas de un vistazo si el token sigue siendo válido.

Estándar abierto, código abierto

Construido sobre la API nativa Web Crypto y el parser JSON del navegador — los mismos algoritmos que OpenSSL, libjwt, jose. El comportamiento coincide con cualquier librería JWT moderna.

Cómo funciona realmente la decodificación de un JWT

Un JWT son tres segmentos JSON codificados en base64url separados por puntos — eso es todo.

  1. 1

    Dividir por los dos puntos

    Un JWT tiene la forma aaa.bbb.ccc. Dividimos por los dos puntos literales y obtenemos la cabecera, el payload y la firma codificados. Si no obtenemos exactamente tres partes, el token está mal formado.

  2. 2

    Decodificar cada parte en Base64URL

    La cabecera y el payload son JSON UTF-8 codificado en base64url. Base64URL = Base64 con -/_ en lugar de +//= y sin padding. Aplicamos atob tras revertir los caracteres y luego JSON.parse al resultado.

  3. 3

    Renderizar con estructura

    La cabecera nos dice el algoritmo (alg: HS256, RS256, etc.) y el tipo. El payload contiene los claims — los estándar (iss, sub, aud, exp, iat, nbf, jti) más cualquier campo personalizado. Mostramos cada uno en una sección etiquetada.

  4. 4

    Verificar (sólo HMAC)

    Para HS256/384/512, recalculamos el HMAC de header.payload usando el secreto que escribiste y lo comparamos con la firma del tercer segmento. Igual que HMAC(SHA-256, secret, signing_input) codificado en base64url. Si coincide, la firma es válida.

Tareas habituales al depurar JWT

Situaciones reales en las que recurrirás a un decodificador JWT.

Inspeccionar un token de tu proveedor de autenticación

Auth0, Firebase, Keycloak y AWS Cognito devuelven JWT tras el login. Pega el access_token para ver qué claims recibe realmente tu app — ¿cuál es el ID de usuario, qué scopes, cuándo expira?

Depurar un 401 Unauthorized

¿La API rechaza tu petición? Decodifica el token para comprobar: ¿está expirado (exp en el pasado)? ¿El claim de audiencia (aud) es el que la API espera? ¿El emisor (iss) es el tenant correcto?

Verificar la firma de un webhook

Stripe, GitHub Apps y Slack envían payloads de webhook firmados como JWT. Tras recibir uno, pégalo en el modo Decodificar junto con el secreto compartido para confirmar que la petición vino realmente de ellos.

Generar tokens de prueba

¿Necesitas un JWT recién firmado para una prueba de integración? Cambia al modo Codificar, edita el payload (ID de usuario personalizado, expiración personalizada), elige HS256 + tu secreto de prueba y obtén un token en milisegundos. Sin ida y vuelta al backend.

Por qué importa decodificar JWT en local

Un JWT a menudo lleva el ID de usuario, el correo, los scopes y a veces el equivalente a las cookies de sesión — exactamente los datos que NO debes pegar en el servidor de un desconocido. El decodificador de iKit se ejecuta como JavaScript ya cargado en tu pestaña del navegador. Verificable en DevTools → Red: ningún fetch, ningún XHR, ningún beacon durante decodificar o verificar.

  • Cero peticiones de red al decodificar o verificar — verificable en DevTools.
  • El secreto que escribes para verificar permanece en la memoria del navegador y se borra al pulsar Limpiar o recargar.
  • Seguro para tokens de producción, tokens de acceso de clientes y secretos de webhooks.

Guías relacionadas

Tutoriales detallados y comparaciones de herramientas del blog de iKit.

Preguntas frecuentes

¿Es seguro? ¿Se suben mis JWT?

No. Toda la herramienta es JavaScript dentro de esta página. Pegas un token, la decodificación ocurre en tu navegador y los bytes nunca salen de la pestaña. Abre DevTools → Red y compruébalo — no se envían peticiones durante decodificar o verificar. Eso lo hace seguro para pegar tokens reales de clientes o producción.

¿Qué verifica realmente la firma de un JWT?

Demuestra que el token fue firmado por alguien que posee el secreto (HMAC) o la clave privada (RSA/ECDSA). NO cifra el payload — la cabecera y el payload son simplemente JSON codificado en base64url, cualquiera con el token puede leerlos. La firma sólo evita la manipulación: si cambias un solo byte del payload, la firma deja de coincidir.

¿Por qué mi payload decodificado parece correcto pero la verificación falla?

Tres causas habituales: (1) secreto incorrecto — los secretos JWT distinguen mayúsculas y cualquier desajuste de espacios rompe la verificación. (2) Algoritmo diferente — la cabecera dice HS256 pero originalmente se firmó con HS512. (3) El token se modificó tras firmar — incluso un byte rompe la firma. Comprueba que header.alg coincide con lo que esperas.

¿Y RS256, ES256 y otros algoritmos de clave pública?

iKit actualmente sólo admite verificación HMAC (HS256/384/512). RS256 y ES256 usan criptografía de clave pública — la verificación necesita la clave pública del emisor en formato PEM, lo que implica una interfaz más compleja. Por ahora, la decodificación sigue funcionando (la cabecera, el payload y la firma se muestran correctamente), pero el botón Verificar te indicará que no es compatible. La verificación RSA/ECDSA está planificada.

¿En qué se diferencia esto de jwt.io?

Misma idea, valores por defecto distintos. El decodificador de iKit se ejecuta enteramente en tu navegador (jwt.io también, pero el código de iKit es visible con view-source y nuestro dominio no tiene rastreadores de terceros). Añadimos una insignia clara EXPIRADO / válido para el claim exp, notas estructuradas de claims (iat / nbf / iss / sub / aud / jti como filas legibles) y un botón para copiar todo lo decodificado que te entrega la salida estructurada completa para pegar en un informe de error.