Skip to content

Decodificador JWT

Decodifica tokens JWT online con nuestro decodificador JWT gratis. Inspecciona encabezado, carga útil, firma, expiración y reclamaciones al instante. 100% navegador — tu token nunca sale del dispositivo. Sin registro ni rastreo.

Sin rastreo Se ejecuta en el navegador Gratis
Token JWT
Revisado para el cumplimiento de RFC 7519 y las garantías de privacidad — Equipo de Seguridad de Go Tools · Apr 22, 2026

¿Qué es un JWT?

Un JSON Web Token, o JWT (pronunciado 'jot'), es un formato compacto y seguro para URL para transportar reclamaciones entre dos partes. Está definido en RFC 7519 y es el formato de credenciales dominante usado por los tokens de acceso OAuth 2.0, los tokens ID de OpenID Connect, las claves API en proveedores de autenticación modernos (Auth0, Okta, Clerk, Supabase, Firebase) y los tokens entre servicios en arquitecturas de microservicios.

«JSON Web Token (JWT) es un formato compacto de representación de reclamaciones destinado a entornos con limitaciones de espacio, como los encabezados HTTP Authorization y los parámetros de consulta URI.» — RFC 7519, Sección 1

Un JWT son tres objetos JSON codificados en Base64URL unidos por puntos: encabezado.carga.firma. El encabezado describe cómo está firmado el token (la reclamación alg — por ejemplo, HS256 o RS256 — y la reclamación typ, normalmente 'JWT'). La carga útil transporta las reclamaciones: reclamaciones registradas como iss, sub, aud, exp, iat, más cualesquiera reclamaciones personalizadas que el emisor necesite (role, scope, email, ID de inquilino). La firma es una prueba criptográfica, calculada sobre el encabezado y la carga útil con el secreto o la clave privada del emisor, que permite al destinatario detectar manipulaciones.

Fundamentalmente, un JWT está codificado, no cifrado. Cualquiera con el token puede leer su carga útil — decodificar es solo Base64URL y análisis JSON. La garantía de seguridad proviene de la firma: un atacante puede leer un JWT, pero no puede producir un JWT diferente que pase la verificación de firma sin la clave de firma. Por eso los JWT son seguros de pasar por la red, pero no seguros para llenar de secretos.

Un decodificador JWT te muestra exactamente lo que contiene un token — algoritmo, reclamaciones, expiración — sin tocar la firma. Es la forma más rápida de responder «¿este token está expirado?», «¿qué rol tiene este usuario?», «¿qué emisor acuñó este token?» o «¿es este un token alg:none que debería rechazar?». Toda la decodificación en esta herramienta se ejecuta localmente en tu navegador, así que pegar un token de producción activo es seguro.

El trabajo con JWT suele combinarse con otras herramientas para desarrolladores. Puede que necesites decodificar un segmento envuelto en Base64URL al depurar un token mal formado, decodificar de URL un encabezado Authorization después de capturarlo desde un proxy, o convertir la reclamación exp a una fecha humana manualmente. Para un recorrido más profundo sobre cómo se firman, verifican y rotan los JWT en producción, consulta nuestra guía de fundamentos de Base64 — Base64URL es la base sobre la que se construye cada JWT.

// Decode a JWT in the browser — header & payload only
function decodeJwt(token) {
  const [h, p, s] = token.split('.');
  const pad = (seg) => seg + '==='.slice((seg.length + 3) % 4);
  const decode = (seg) => JSON.parse(
    atob(pad(seg).replace(/-/g, '+').replace(/_/g, '/'))
  );
  return { header: decode(h), payload: decode(p), signature: s };
}

const { header, payload } = decodeJwt(token);
console.log(header);   // → { alg: 'HS256', typ: 'JWT' }
console.log(payload);  // → { sub: 'user_123', exp: 1999999999, ... }

// Expiration check
const expired = payload.exp * 1000 < Date.now();

Características Clave

Decodifica JWT al Instante

Pega y ve el JWT decodificado en tiempo real — encabezado, carga útil y firma analizados al vuelo. Sin botón Decodificar, sin viaje de ida y vuelta al servidor.

Detección de Expiración

Lee automáticamente la reclamación exp y muestra una insignia roja cuando el token ha expirado, con la fecha exacta de expiración en tu zona horaria local.

Agnóstico al Algoritmo

Decodifica todo algoritmo JWS — HS256/384/512, RS256/384/512, PS256/384/512, ES256/384/512, EdDSA y alg:none.

100% Local

La decodificación se ejecuta en tu navegador mediante atob nativo y JSON.parse. Tu token nunca se sube — seguro para credenciales de producción.

Vista Consciente de Reclamaciones

Resalta las reclamaciones registradas de RFC 7519 (iat, exp, nbf, iss, aud, sub, jti) para que detectes problemas de autenticación de un vistazo.

Copia con un Clic

Copia el JSON del encabezado, el JSON de la carga útil o la firma bruta a tu portapapeles con un solo clic — perfecto para reportes de error y pruebas.

Ejemplos

Token HS256 (Válido)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcxNTAwMDAwMCwiZXhwIjoxOTk5OTk5OTk5fQ.4NhxPjwoZxPNuxG-2C5ugGxaUsUJ0QyskAz7Ymz5Sg0
{
  "alg": "HS256",
  "typ": "JWT"
}

{
  "sub": "user_123",
  "name": "Alice",
  "role": "admin",
  "iat": 1715000000,
  "exp": 1999999999
}

Token firmado con HMAC-SHA256 con un sujeto, rol y expiración futura — la configuración JWT más común para autenticación de sesión.

Token RS256 (Expirado)

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImtleS0yMDI1LTAxIn0.eyJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJhdWQiOiJhcGkuZXhhbXBsZS5jb20iLCJzdWIiOiI5MDA4NzE2NSIsImlhdCI6MTYwMDAwMDAwMCwiZXhwIjoxNjAwMDAzNjAwLCJzY29wZSI6InJlYWQ6dXNlciB3cml0ZTpwb3N0In0.signature_placeholder
{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "key-2025-01"
}

{
  "iss": "https://auth.example.com",
  "aud": "api.example.com",
  "sub": "90087165",
  "iat": 1600000000,
  "exp": 1600003600,
  "scope": "read:user write:post"
}

Token de acceso estilo OAuth firmado con RSA — observa el kid (ID de clave) en el encabezado y la reclamación exp que muestra que el token ya ha expirado.

Token ID de OIDC

eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJzdWIiOiIxMTA1MDIyNTExNTU4OTkwNzY2Mzk1IiwiYXpwIjoiY2xpZW50LWlkIiwiYXVkIjoiY2xpZW50LWlkIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OSwibm9uY2UiOiJhYmMxMjMifQ.signature
{
  "alg": "ES256",
  "typ": "JWT"
}

{
  "iss": "https://accounts.google.com",
  "sub": "110502251155899076639",
  "azp": "client-id",
  "aud": "client-id",
  "email": "alice@example.com",
  "email_verified": true,
  "iat": 1715000000,
  "exp": 1999999999,
  "nonce": "abc123"
}

Token ID de OpenID Connect con firma ECDSA, reclamaciones de correo electrónico y un nonce para protección contra repetición.

Token alg:none (Sin Firmar)

eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJkZWJ1Zy11c2VyIiwiaWF0IjoxNzE1MDAwMDAwfQ.
{
  "alg": "none",
  "typ": "JWT"
}

{
  "sub": "debug-user",
  "iat": 1715000000
}

Token sin firmar con alg:none. Aceptar esto en producción es una vulnerabilidad JWT clásica — siempre rechaza alg:none en el servidor.

Cómo Usar

  1. 1

    Pega tu JWT para Decodificar

    Pega el token completo a decodificar — incluyendo los tres segmentos separados por puntos — en el cuadro de entrada. El decodificador se ejecuta al instante en tu navegador; no necesitas hacer clic en un botón.

  2. 2

    Lee el Encabezado, Carga Útil y Estado Decodificados

    Lee el algoritmo y el tipo de token en el encabezado decodificado, las reclamaciones en la carga útil decodificada y los chips de expiración / emisión en la parte superior. Un token expirado se marca en rojo.

  3. 3

    Copia la Salida Decodificada

    Usa el botón Copiar en cada panel para copiar el JSON del encabezado decodificado, el JSON de la carga útil decodificada o la firma bruta. Tu token nunca se envió a ningún sitio — la decodificación ocurrió localmente en tu navegador.

Common Errors

Aceptar alg:none

Un JWT sin firmar puede ser forjado por cualquiera. Nunca permitas alg:none en producción — pasa siempre una lista explícita de algoritmos a tu llamada de verificación.

✗ Incorrecto
jwt.verify(token, secret)  // library default may allow 'none'
✓ Correcto
jwt.verify(token, secret, { algorithms: ['RS256'] })

Reclamación exp Ausente

Un JWT sin exp vive para siempre. Si un token se filtra, no hay un punto de revocación natural. Establece siempre una expiración apropiada para el tipo de token.

✗ Incorrecto
{ "sub": "user_123", "role": "admin" }  // no exp
✓ Correcto
{ "sub": "user_123", "role": "admin", "exp": 1715003600 }

Almacenar Secretos en la Carga Útil

Las cargas útiles JWT no están cifradas — cualquiera con el token puede leerlas. Nunca pongas contraseñas, claves API o PII sin truncar dentro de una carga útil JWT.

✗ Incorrecto
{ "sub": "user_123", "password": "hunter2" }
✓ Correcto
{ "sub": "user_123", "role": "admin" }  // payload stays minimal

Casos de Uso Comunes

Decodifica Tokens Authorization Bearer
Decodifica tokens JWT de encabezados Authorization: Bearer para verificar las reclamaciones, audiencia y expiración que está recibiendo tu backend.
Decodifica Tokens OAuth 2.0 y OIDC
Decodifica tokens de acceso y tokens ID devueltos por servidores de autorización (Auth0, Okta, Google, Keycloak) durante la integración OAuth 2.0 y OpenID Connect.
Diagnóstico de Sesión Expirada
Confirma en un segundo si un token rechazado está expirado, usa la audiencia equivocada o tiene un problema de desfase de reloj.
Comprobaciones de Rotación de Claves
Lee el kid (ID de clave) en el encabezado para verificar que tu rotación JWKS esté entregando tokens firmados con la clave esperada.
Revisiones de Seguridad
Detecta tokens firmados con alg:none, sin exp o que filtran PII en la carga útil durante revisiones de código y pentesting.
Inspección de Tokens de Microservicios
Decodifica tokens servicio a servicio dentro de una malla para ver qué scopes y sujeto está autorizando una llamada descendente.

Detalles Técnicos

Cumple con RFC 7519
Maneja tokens JWS conformes a RFC 7519 (JWT), RFC 7515 (JWS) y RFC 7518 (JWA) — todos los algoritmos registrados son compatibles para la decodificación.
Decodificación Base64URL
Usa el alfabeto Base64 seguro para URL (- y _ en lugar de + y /) definido en RFC 4648, con un análisis tolerante al relleno.
Nativo del Navegador, Sin Dependencias
Construido sobre atob, TextDecoder y JSON.parse del navegador — sin bibliotecas externas, sin llamadas de red, sin telemetría.

Mejores Prácticas

Nunca Confíes sin Verificar
Un decodificador muestra reclamaciones; no las demuestra. Verifica siempre la firma en el servidor contra la clave del emisor antes de confiar en cualquier reclamación.
Rechaza alg:none en Producción
Configura tu biblioteca JWT con una lista explícita de algoritmos permitidos. Nunca aceptes alg:none y desconfía de desajustes de alg en la rotación de claves.
Mantén las Cargas Útiles Ligeras
Pon identificadores y reclamaciones de corta duración en el JWT; mantén los datos voluminosos detrás de un ID de sesión opaco. Los tokens grandes cuestan ancho de banda en cada solicitud.

Preguntas Frecuentes

¿Cómo decodifico un token JWT online?
Pega el JWT completo — los tres segmentos separados por puntos (header.payload.signature) — en el decodificador de arriba. La decodificación ocurre al instante en tu navegador: el encabezado y la carga útil se decodifican desde Base64URL a JSON legible, y la firma se muestra como cadena en bruto. Una fila de estado revela el algoritmo de firma, la hora de emisión y la expiración, para que detectes un token expirado de un vistazo. Para decodificar un JWT manualmente, divide el token por los puntos, decodifica en Base64URL los dos primeros segmentos y analízalos como JSON — cualquiera con el token puede leer sus reclamaciones porque la carga útil está codificada, no cifrada. Este decodificador es seguro con tokens de producción porque nada sale de tu dispositivo: sin petición de red, sin registros, sin rastreo.
¿Qué es un JWT (JSON Web Token)?
Un JSON Web Token (JWT) es una credencial compacta y segura para URL que transporta reclamaciones entre dos partes. Definido en RFC 7519, consta de tres secciones codificadas en Base64URL unidas por puntos: el encabezado (algoritmo y tipo de token), la carga útil (reclamaciones — datos sobre el usuario y el propio token) y la firma (una prueba criptográfica de que el token fue emitido por una parte de confianza). Los JWT son la forma estándar de representar tokens de acceso en OAuth 2.0 y tokens ID en OpenID Connect.
¿Mi token está seguro con este decodificador JWT?
Sí. Toda la decodificación se ejecuta en tu navegador usando JavaScript nativo (atob y TextDecoder). Tu token nunca se envía a un servidor, nunca se registra, nunca se almacena y nunca se usa para analítica. No hay cookies ni seguimiento. Esto importa porque los JWT pueden contener tokens de acceso activos — pegarlos en un depurador remoto equivaldría a entregar una credencial. Nuestra herramienta es segura para usar con tokens de producción.
¿Cómo funciona un decodificador JWT?
Un decodificador JWT divide el token por puntos en tres partes, decodifica el encabezado y la carga útil desde Base64URL y los analiza como JSON. La firma se deja como una cadena Base64URL opaca porque verificarla requiere el secreto o la clave pública del emisor — algo que un decodificador del lado del cliente no puede hacer de forma segura. Esto significa que la decodificación es instantánea y revela las reclamaciones, pero debes verificar la firma en el servidor con la clave correcta antes de confiar en cualquier dato interno.
¿Puede esta herramienta verificar una firma JWT?
No, e intencionadamente no lo hace. La verificación de firma requiere el secreto del emisor (para HMAC) o la clave pública (para RSA/ECDSA/EdDSA), que nunca deberían pegarse en una herramienta web pública. La verificación debe ocurrir en tu servidor, en tu middleware de autenticación o dentro de un SDK que tenga acceso a tu endpoint JWKS. Este decodificador sirve para inspeccionar lo que un token reclama — no implica que el token sea auténtico ni que no haya sido manipulado.
¿Qué son iat, exp, nbf, iss, aud, sub y jti?
Son las reclamaciones registradas de RFC 7519. iat (issued at, emitido en) es la marca de tiempo Unix en que se creó el token. exp (expiration, expiración) es cuándo el token deja de ser válido — esta herramienta lo convierte a una fecha legible y marca el token como expirado si exp está en el pasado. nbf (not before, no antes de) es el momento más temprano en que se puede usar el token. iss (issuer, emisor) identifica quién creó el token. aud (audience, audiencia) nombra al destinatario previsto. sub (subject, sujeto) identifica al principal — normalmente un ID de usuario. jti es un ID de token único usado para prevenir repeticiones. Las reclamaciones específicas de la aplicación (role, scope, email, name) conviven junto a estas.
Mi JWT está expirado — ¿por qué el decodificador aún lo decodifica?
Decodificar no es lo mismo que validar. Un decodificador JWT lee el contenido independientemente de la expiración, por lo que puedes inspeccionar un token expirado o inválido para depurar por qué fue rechazado. La insignia 'Expirado' en esta herramienta compara la reclamación exp con tu reloj local y marca los tokens cuyo exp está en el pasado. Un servidor de autenticación real rechazaría el token directamente — pero un decodificador que se negara a mostrar tokens expirados sería inútil para depurar.
¿Cuál es la diferencia entre JWT, JWS y JWE?
JWT es el concepto general — un objeto JSON codificado como un token compacto. JWS (RFC 7515) es un JWT firmado: la carga útil es legible por cualquiera que lo decodifique, y una firma demuestra que no ha sido manipulado. Este es, con diferencia, el JWT más común que encontrarás. JWE (RFC 7516) es un JWT cifrado: la carga útil en sí es texto cifrado y no puede decodificarse sin la clave de descifrado. Esta herramienta decodifica tokens JWS. Un token JWE solo decodificará su encabezado — la carga útil cifrada no es legible sin la clave.
¿Por qué es peligroso alg:none?
Un JWT con alg:none no tiene firma — cualquiera puede construir uno, afirmando ser cualquier usuario. Las primeras bibliotecas JWT aceptaban alg:none por defecto, lo que dio lugar a una conocida clase de bypasses de autenticación donde un atacante eliminaba la firma, establecía alg a none y forjaba un token de administrador. Toda biblioteca JWT madura ahora rechaza alg:none a menos que se permita explícitamente, y nunca deberías aceptarlo para solicitudes autenticadas. Este decodificador aún te mostrará un token alg:none, porque inspeccionarlo durante la depuración es legítimo — pero trata cualquier token así recibido en producción como hostil.
¿Qué algoritmos soporta este decodificador JWT?
Decodificar el encabezado y la carga útil funciona para todo algoritmo, porque decodificar solo requiere análisis de Base64URL y JSON — es agnóstico al algoritmo. La herramienta lee correctamente tokens firmados con HS256, HS384, HS512 (HMAC), RS256, RS384, RS512 (RSA + SHA), PS256, PS384, PS512 (RSA-PSS), ES256, ES384, ES512 (ECDSA), EdDSA (Ed25519/Ed448) y tokens sin firmar (alg:none). Solo la verificación de firma es específica del algoritmo, y esta herramienta no realiza verificación.
¿Debería almacenar JWT en localStorage o en cookies?
Prefiere cookies HttpOnly, Secure, SameSite=Strict para tokens de sesión. Un token en localStorage es legible por cualquier JavaScript que se ejecute en la página, así que una sola vulnerabilidad XSS filtra cada sesión activa. Las cookies HttpOnly son invisibles para JavaScript, lo que reduce el radio de impacto de un XSS a lo que un atacante puede hacer dentro de una página activa — no a un token robado que pueda reutilizar durante días. Si debes usar localStorage (por ejemplo, para aplicaciones multi-dominio), mantén tiempos de vida cortos para el token de acceso (minutos, no horas) y usa un token de actualización separado en una cookie HttpOnly.
¿Cómo decodifico un JWT en Node.js, Python o Go?
Node.js: jsonwebtoken.decode(token) para solo lectura, jsonwebtoken.verify(token, key) para verificación. Python: PyJWT.decode(token, options={'verify_signature': False}) para leer, pasa una clave para verificar. Go: jwt.ParseUnverified(token, claims) para solo lectura, jwt.Parse(token, keyFunc) para verificación. En todos los lenguajes, nunca verifiques con options={'verify_signature': False} en código de producción — eso es lo que esta herramienta web hace deliberadamente para depuración, y solo es seguro cuando estás inspeccionando, no autenticando.
¿Cuál es el tamaño máximo de un JWT?
El estándar JWT no impone un límite estricto, pero los encabezados en la mayoría de servidores web tienen un valor por defecto de alrededor de 8 KB. Mantén los tokens por debajo de 4 KB para que quepan cómodamente en encabezados Authorization y cookies. Si tu token es mayor que eso, probablemente estés poniendo demasiadas reclamaciones en la carga útil — mueve los datos voluminosos detrás de un ID de sesión opaco y recupéralos desde tu backend cuando sea necesario. Los JWT inflados también resultan costosos en cada solicitud porque se envían con cada llamada a la API.
Pegué mi token y obtuve 'Formato JWT inválido' — ¿qué pasa?
Un JWT válido tiene exactamente tres partes separadas por puntos: encabezado.carga.firma. Causas comunes: (1) copiaste accidentalmente solo el segmento de carga útil, (2) se pegaron espacios en blanco o saltos de línea en medio, (3) el token fue truncado en tránsito (común con el ajuste de línea de terminal), (4) el token es un JWE donde el formato es encabezado.claveCifrada.iv.textoCifrado.etiqueta (cinco segmentos), o (5) el token fue codificado en URL y necesitas decodificarlo de URL primero. Comprueba el valor bruto que devolvió tu API — la mayoría de editores muestran caracteres invisibles al pasar el cursor.
¿Puedo decodificar un JWT sin la clave secreta?
Sí — el encabezado y la carga útil están codificados en Base64URL, no cifrados. Cualquiera que tenga el token puede leer sus reclamaciones sin ninguna clave. Esto es por diseño: la carga útil está pensada para ser legible para que el destinatario pueda tomar decisiones de autorización a partir de ella. La clave secreta o pública solo se requiere para verificar que el token no ha sido manipulado. Por eso nunca debes poner datos sensibles (contraseñas, claves privadas, PII más allá de lo que el destinatario ya conoce) dentro de una carga útil JWT.
Mi JWT funciona en Postman pero mi backend lo rechaza — ¿cómo depuro?
Decodifica el token aquí y comprueba: (1) exp — ¿está en el futuro respecto al reloj del servidor? El desfase de reloj del servidor es un culpable frecuente. (2) iss / aud — ¿coinciden exactamente con lo que tu backend espera? Un desajuste en aud es el falso negativo más común. (3) alg — ¿tu código de verificación permite ese algoritmo? Un token HS256 fallará contra una biblioteca configurada solo para RS256. (4) kid — si usas rotación de claves, ¿está el ID de clave del encabezado presente en tu JWKS? (5) firma — ¿has pegado la clave secreta/pública correcta? Este decodificador expone (1), (2), (3) y (4) en las vistas de encabezado y carga útil para que puedas descartarlas rápidamente.

Herramientas relacionadas

Ver todas las herramientas →

Generador de Hash MD5 Online y Verificador de Checksum

Herramientas de Seguridad

Genera hashes MD5, SHA-256, SHA-1 y SHA-512 gratis — 100% en tu navegador, sin registro. Hashea texto o archivos, verifica checksums y compara hashes con un clic. Tus datos permanecen privados.

Generador de Contraseñas Aleatorias y Seguras

Herramientas de Seguridad

Genera contraseñas seguras al instante — gratis, sin registro, 100% en tu navegador. Personaliza la longitud y los tipos de caracteres, genera hasta 50 contraseñas. Medidor de fortaleza con análisis de entropía.

Generador y Decodificador de UUID — v1, v4, v5, v7 Modo Lote

Herramientas de Seguridad

Generador de UUID gratuito — crea UUIDs v1, v4, v5, v7 al instante. Decodifica y valida cualquier UUID. Generación en lote de hasta 50. Sin registro, 100% en el navegador.

Conversor de Bases — Binario, Hex, Decimal, Octal

Herramientas de Conversión

Convierte números entre binario, hexadecimal, decimal, octal y cualquier base personalizada (2-36) al instante. Gratis, privado, sin registro — todo el procesamiento ocurre en tu navegador.

Decodificador y Codificador Base64

Codificación y Formato

Decodifica y codifica Base64 online de forma gratuita. Conversión en tiempo real con soporte completo de UTF-8 y emojis. 100% privado — funciona en tu navegador. Sin registro.

Comprimir Imágenes Online — JPEG, PNG y WebP

Herramientas de Conversión

Reduce el tamaño de las imágenes hasta un 80% — comprime JPEG, PNG y WebP en tu navegador, sin subir archivos. Lotes de 20 imágenes, ajusta la calidad, compara antes y después. Gratis y privado.