Decodificador JWT
Pega un JWT (tres partes codificadas en base64url separadas por puntos) y el decodificador muestra el encabezado, la carga útil y la firma, decodificados y bien formateados, junto con el algoritmo detectado, la expiración del token en tu hora local, y si nbf (no antes), iat (emitido en) y exp (expiración) son consistentes. Verificación de firma opcional si tienes el secreto o la clave pública.
Cómo decodificar un JWT
-
1
Pega el token
Tres cadenas en base64url separadas por `.` (encabezado.carga útil.firma).
-
2
Lee el encabezado decodificado
Algoritmo, tipo, ID de clave (`kid`). El algoritmo te dice qué tipo de clave necesitas para la verificación.
-
3
Lee la carga útil
Claims estándar (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) más cualquier claim personalizado que emita tu aplicación.
-
4
Verificar (opcional)
Proporciona el secreto HMAC (para HS256/384/512) o la clave pública (para RS256, ES256, etc.) para confirmar que la firma es válida.
Anatomía de un JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNjAwMDAwMDAwfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Cada segmento está codificado en base64url (no en base64 estándar). El encabezado es JSON como {"alg":"HS256","typ":"JWT"}, la carga útil es JSON como {"sub":"1234567890","name":"Alice","iat":1600000000}, y la firma es la firma HMAC o RSA de encabezado.carga útil.
Claims estándar (RFC 7519)
| Claim | Nombre | Notas |
|---|---|---|
iss |
Emisor | Quién emitió el token |
sub |
Sujeto | De quién es el token |
aud |
Audiencia | Para quién es el token |
exp |
Tiempo de expiración | Marca de tiempo Unix; rechazado después de este tiempo |
nbf |
No antes | Marca de tiempo Unix; rechazado antes de este tiempo |
iat |
Emitido en | Marca de tiempo de creación del token |
jti |
ID de JWT | Identificador único para listas de revocación |
Algoritmos soportados
Valor alg |
Tipo de clave |
|---|---|
HS256/HS384/HS512 |
Secreto HMAC compartido |
RS256/RS384/RS512 |
Clave pública RSA |
ES256/ES384 |
Clave pública ECDSA |
PS256/PS384 |
Clave pública RSA-PSS |
EdDSA / Ed25519 |
Curva de Edwards |
none |
Nunca confíes en esto, tokens no firmados |
La trampa de alg: none
Las primeras bibliotecas de JWT permitían tokens "alg": "none" y los aceptaban ingenuamente como válidos. Por eso, siempre:
- Define una lista blanca de los algoritmos que tu aplicación acepta.
- Rechaza
alg: noneincondicionalmente. - Rechaza
alg: HS256cuando tu código de verificación esperaRS256(el ataque de “confusión de algoritmo”).
Lo que NO es un JWT
- No está encriptado. El encabezado y la carga útil están codificados en base64, lo cual es trivial de decodificar. Nunca pongas secretos en un JWT sin envolverlo en JWE.
- No es revocable por defecto. Una vez emitido, un JWT es válido hasta
exp. Para la revocación necesitas una lista negra o una expiración corta + tokens de actualización. - No es un reemplazo de cookie de sesión para cada caso de uso. Tokens opacos almacenados del lado del servidor son a menudo más simples y seguros.
Errores comunes
- Confiar en el encabezado. El
kidyalgprovienen del token mismo. Un servidor comprometido puede establecerlos arbitrariamente; siempre valida contra una lista fija. - Ignorar la desviación de
nbfyiat. La deriva del reloj significa queiat > ahorapuede suceder. Permite un pequeño margen (30-60s). - Registrar JWTs completos. La carga útil a menudo contiene IDs de usuario, correos electrónicos, permisos, PII que no debería terminar en stdout.
- Usar HS256 con un secreto débil. Un secreto de 16 caracteres es susceptible a fuerza bruta en minutos. Usa al menos 256 bits de entropía aleatoria.
Preguntas frecuentes
No. La decodificación se realiza en tu navegador. El token permanece local, importante porque los JWT a menudo contienen datos de sesión, IDs de usuario y permisos.
Sí. Si pegas el secreto HMAC compartido o la clave pública codificada en PEM, la verificación ocurre en tu navegador. La clave nunca sale de tu máquina.
Significa que el token no está firmado. Nunca aceptes tales tokens en producción, pueden ser falsificados trivialmente. Varios CVEs de alto perfil fueron específicamente sobre bibliotecas que aceptaban alg: none por defecto.
La firma de JWT prueba autenticidad, no confidencialidad. El encabezado y el payload están codificados en base64url, lo cual es reversible. Para la confidencialidad, usa JWE (JSON Web Encryption) alrededor del JWT, o evita poner datos sensibles en el payload.
Herramientas relacionadas
Referencia de la tabla ASCII
Tabla ASCII completa del 0 al 127 con decimal, hex, octal, binario y referencia numérica HTML para cada carácter, incluidos los códigos de control como NUL, LF y DEL.
Referencia de caracteres HTML
Lista buscable de entidades HTML, sus códigos nombrados y numéricos, y una copia con un clic para caracteres y símbolos especiales.
Referencia de atajos de teclado
Busca los atajos predeterminados documentados de VS Code, Chrome y Bash con GNU Readline en macOS, Windows y Linux.
Generador de letras aleatorias
Genera letras aleatorias A-Z. Elige la cantidad, usa mayúsculas, minúsculas o mezcla de ambas, y aplica el resultado en juegos, consignas o clase.
Generador de Paletas de Color
Genera paletas monocromáticas, análogas, complementarias, triádicas o tetrádicas desde un color base HEX y exporta variables CSS listas para copiar.
Generador de EditorConfig
Genera un archivo .editorconfig con tu estilo y tamaño de indentación, fin de línea, charset y reglas de espacios para un formato consistente en IDEs y editores.
Herramienta disponible en otros idiomas
- Mã giải mã JWT [VI]
- مُفكّك JWT [AR]
- ตัวถอดรหัส JWT [TH]
- JWT-decoder [NL]
- Décodeur JWT [FR]
- JWT 해독기 [KO]
- Dekoder JWT [PL]
- Decoder JWT [ID]
- JWT-Dekoder [DE]
- JWT-avkodare [SV]
- JWTデコーダ [JA]
- Decodificador JWT [PT]
- Декодировщик JWT [RU]
- JWT Dekoderi [TR]
- JWT 解码器 [ZH]
- JWT Decoder [EN]
- Decoder JWT [IT]