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?
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.
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.
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.
HS256 necesita al menos 32 bytes (256 bits) para una verdadera fortaleza criptográfica. Cualquier valor sirve para pruebas, pero en producción usa un secreto largo y aleatorio.
La forma más rápida de depurar un JWT — sin subidas, sin registro, sin terceros entre tú y tu token.
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.
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.
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.
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.
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.
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.
Un JWT son tres segmentos JSON codificados en base64url separados por puntos — eso es todo.
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.
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.
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.
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.
Situaciones reales en las que recurrirás a un decodificador JWT.
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?
¿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?
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.
¿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.
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.
Tutoriales detallados y comparaciones de herramientas del blog de iKit.
JWT segments are base64url-encoded JSON — understand the encoding before you debug a token.
JWT signatures are HMAC-SHA hashes — the same family of cryptographic hashes used to verify file integrity.
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.
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.
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.
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.