Decodificador de JWT

Decodifica un JWT en su header, payload y caducidad en tu navegador, JSON con formato, fechas legibles, nada sale de tu dispositivo.

🌐 English

🔒 Privado por diseño: tu texto se procesa localmente en tu navegador; nada se sube nunca a ningún servidor.

Cómo decodificar un JWT

  1. Pega el JSON Web Token completo en la caja de arriba, las tres partes separadas por puntos (header.payload.signature), exactamente como lo tiene tu app, la respuesta de tu API o la cookie de tu navegador.
  2. Haz clic en Decodificar JWT, el header y el payload aparecen instantáneamente como JSON con formato, justo debajo, junto con una nota en lenguaje sencillo sobre la caducidad.
  3. Haz clic en Copiar al portapapeles para obtener el resultado, o pega un token distinto y vuelve a ejecutarlo.

Sin archivo que elegir, sin librería que importar en un script improvisado, solo pega y lee.

Por qué decodificar un JWT

Los JSON Web Tokens están por todas partes en las apps web y móviles modernas: una cabecera Authorization: Bearer <token> en una llamada a la API, una cookie de sesión, un token de acceso o ID de OAuth/OIDC, un ticket de inicio de sesión único pasado entre servicios. Un JWT parece un blob opaco de galimatías, pero en realidad son solo tres segmentos codificados en Base64URL pegados con puntos, un header que describe el algoritmo de firma, un payload de claims (para quién es el token, qué concede, cuándo caduca) y una firma que se supone que prueba que los dos primeros no han sido alterados.

Los desarrolladores recurren a un decodificador de JWT constantemente y por razones muy comunes: confirmar que una API realmente emitió los roles/scopes que esperas, comprobar por qué una petición falla con “token caducado” leyendo el timestamp real de exp, inspeccionar qué puso realmente un proveedor SSO externo en un token de ID, o depurar una sesión que se comporta de forma distinta a lo que el código sugiere. Hacer eso a mano significa dividir manualmente la cadena por ., decodificar Base64URL (que usa -/_ en lugar de +// y normalmente elimina su relleno), y convertir timestamps Unix en fechas reales, tedioso cada vez.

No es verificación de firma, solo visualización

Esto es lo único que hay que entender bien sobre cualquier decodificador de JWT, incluido este: decodificar un token no es lo mismo que verificarlo. El header y el payload de un JWT son Base64URL plano (legible por cualquiera, no cifrado) así que decodificarlos es trivial y no prueba nada sobre de dónde vino el token. La firma es la parte que realmente certifica la autenticidad, y comprobarla requiere el secreto de firma del emisor (para algoritmos HMAC como HS256) o la clave pública (para algoritmos RSA/ECDSA como RS256/ES256), algo que una herramienta de navegador genérica nunca tiene y no debería pedirte que pegues de todos modos. Esta página te muestra lo que un token afirma, no si esas afirmaciones son ciertas. Trata un payload decodificado como “esto es lo que dice este token”, nunca como “esto está confirmado como legítimo”.

Privado, porque tu token nunca sale de tu dispositivo

Un JWT frecuentemente lleva datos reales de usuario, una dirección de email, un ID de usuario interno, roles de cuenta, a veces más de lo que el emisor pretendía. Pegar eso en un decodificador online aleatorio que silenciosamente lo redirige a través de un servidor es un riesgo real y evitable, especialmente para un token de producción. Esta herramienta ejecuta la lógica de dividir-decodificar-analizar usando solo el motor JavaScript propio de tu navegador: nada se transmite, registra ni almacena, y funciona igual sin conexión una vez que la página ha cargado.

Usos habituales

Cómo funciona, en imágenes

Captura de pantalla de la herramienta Decodificador de JWT con la entrada de ejemplo «eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ…»
Decodificador de JWT en pleno proceso: la entrada de ejemplo «eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ…».
Captura de pantalla del resultado de Decodificador de JWT mostrando la salida generada «=== HEADER === { "alg": "HS256", "typ": "JWT" } …»
El resultado final: la salida generada «=== HEADER === { "alg": "HS256", "typ": "JWT" } …». El enlace de descarga es una URL blob local: el archivo nunca sale de tu dispositivo.

Preguntas frecuentes

¿Se envía mi JWT a un servidor para decodificarlo?

No. Este decodificador es JavaScript puro que divide, decodifica en Base64URL y analiza el token enteramente dentro de tu pestaña del navegador en el momento en que haces clic en el botón. Un JWT suele llevar un ID de usuario, un email, un ID de sesión o roles internos, esta herramienta nunca lo transmite, registra ni almacena en ningún sitio, a diferencia de muchas webs de "pega tu JWT aquí" que silenciosamente lo envían a través de un backend.

¿Decodificar un JWT prueba que es genuino o que no ha sido manipulado?

No, y esto es importante. El header y el payload de un JWT son solo JSON codificado en Base64URL, no cifrado ni sellado; cualquiera puede decodificar uno, cambiar cualquier claim (rol, ID de usuario, caducidad) y volver a codificarlo en un nuevo token igual de 'válido en apariencia'. Lo único que realmente prueba que un JWT es auténtico es verificar su firma contra el secreto o la clave pública real del emisor, esta herramienta deliberadamente NO hace eso (no puede, sin esa clave), así que un token que se decodifica correctamente aquí no dice nada sobre si fue emitido legítimamente. Nunca trates un token como fiable solo porque se decodificó y parecía razonable.

¿Por qué la salida muestra "Expires" y "Issued at" si el JWT solo tiene números como exp y nbf?

La especificación de JWT almacena los claims basados en tiempo (exp, iat, nbf) como timestamps Unix (el número de segundos desde el 1 de enero de 1970) que no son legibles a simple vista. Esta herramienta convierte cualquiera de esos claims que tu token realmente tenga en una fecha/hora de calendario real (y te dice claramente si el token ya ha caducado), sin inventar claims que no estén presentes en el payload.

¿Qué contiene la parte de "signature" (firma) de la salida?

El tercer segmento de un JWT es una firma criptográfica en bruto (o MAC), no JSON, así que esta herramienta la muestra tal cual en lugar de intentar forzarla a través de un analizador JSON, lo que simplemente fallaría. Se incluye por completitud, pero verificarla (la única forma de confirmar realmente la autenticidad) requiere el secreto o la clave pública del emisor, algo que esta herramienta de solo navegador nunca tiene ni pide.

¿Hay un límite de tamaño, o funciona sin conexión?

No hay ningún límite artificial, la decodificación se ejecuta enteramente en la memoria propia de tu navegador en lugar de a través de una petición de red, así que gestiona un token con un payload enorme con la misma facilidad que uno pequeño, y sigue funcionando sin conexión a internet una vez que la página ha cargado.

¿Puedo decodificar un token malformado o truncado?

Obtendrás un error claro y específico en lugar de un fallo o basura silenciosa, por ejemplo si el token no se divide en exactamente 3 segmentos separados por puntos, o si el contenido decodificado de un segmento resulta no ser JSON válido. Eso suele ser señal de un copiar-pegar que perdió caracteres, o texto que nunca fue realmente un JWT.

Herramientas relacionadas