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.
¿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
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
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
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.
jwt.verify(token, secret) // library default may allow 'none'
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.
{ "sub": "user_123", "role": "admin" } // no exp { "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.
{ "sub": "user_123", "password": "hunter2" } { "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?
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)?
¿Mi token está seguro con este decodificador JWT?
¿Cómo funciona un decodificador JWT?
¿Puede esta herramienta verificar una firma JWT?
¿Qué son iat, exp, nbf, iss, aud, sub y jti?
Mi JWT está expirado — ¿por qué el decodificador aún lo decodifica?
¿Cuál es la diferencia entre JWT, JWS y JWE?
¿Por qué es peligroso alg:none?
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?
¿Debería almacenar JWT en localStorage o en cookies?
¿Cómo decodifico un JWT en Node.js, Python o Go?
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?
Pegué mi token y obtuve 'Formato JWT inválido' — ¿qué pasa?
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?
Mi JWT funciona en Postman pero mi backend lo rechaza — ¿cómo depuro?
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.