Generador y Decodificador de JWT (JSON Web Tokens)
Pega un JWT y desglosa al instante su header, su payload y su firma, con el estado de expiración calculado en tiempo real. O crea el tuyo: edita los dos JSON, elige HS256, HS384 o HS512 y fírmalo con tu secret sin que nada salga de tu navegador.
Procesamiento 100 % local. El token y el secret se firman y verifican en tu navegador con la Web Crypto API. No se envían a ningún servidor, no se guardan y el enlace para compartir nunca incluye el secret. Aun así, evita pegar tokens de producción en cualquier herramienta que no controles.
Opcional. Solo se necesita para comprobar la firma; el payload se lee sin él.
Herramienta informativa e independiente. Redutil no está afiliado a Google, la DIAN, el Ministerio de Trabajo ni a ninguna entidad oficial, y este simulador no constituye asesoría legal, contable ni fiscal formal. Leer más.
¿Qué es un JWT (JSON Web Token)?
Un JSON Web Token es un formato compacto para transportar información verificable entre dos sistemas. Son tres bloques separados por puntos: el header, que declara el algoritmo de firma; el payload, con los datos o claims; y la firma, que permite comprobar que los dos primeros no se han tocado desde que se emitieron.
La confusión más extendida es creer que un JWT va cifrado. No lo va: header y payload solo están codificados en base64url, una transformación reversible que no necesita ninguna clave. Cualquiera que intercepte el token puede leer su contenido, y esta misma herramienta lo demuestra al decodificarlo sin pedirte el secret. Lo que aporta la firma es integridad y autenticidad, no confidencialidad.
Esa firma se calcula con el secret y con los dos bloques ya codificados. Si alguien cambia un solo carácter del payload —por ejemplo, para ascenderse a administrador—, la firma deja de cuadrar y el servidor rechaza el token. Por eso el secret es la pieza crítica: quien lo tenga puede emitir tokens válidos a nombre de tu aplicación, y por eso esta herramienta firma en local y nunca lo transmite.
El caso de uso habitual es la autenticación sin estado. El servidor emite el token al iniciar sesión, el cliente lo envía en la cabecera Authorization de cada petición y el backend valida la firma sin consultar la base de datos. La contrapartida es que un JWT emitido no se puede revocar: hasta que llega su exp, sigue siendo válido aunque el usuario cierre la sesión.
Cómo funciona
- En la pestaña «Decodificar», pega el token completo. Admite el prefijo Bearer tal y como aparece en la cabecera Authorization, así que puedes copiarlo directamente de las herramientas de red del navegador.
- Revisa los tres paneles de la derecha: header en rosa, payload en morado y firma en verde, el mismo código de color que usa jwt.io.
- Consulta el estado de vigencia bajo el payload. El contador se actualiza cada segundo e indica si el token expiró y hace cuánto, o cuánto tiempo le queda.
- Escribe el secret si quieres comprobar la firma. Es opcional: el contenido se lee sin él, pero sin secret no hay forma de saber si el token es auténtico.
- En la pestaña «Generar y firmar», edita el header y el payload con validación de sintaxis en vivo, y usa «Formatear JSON» para reindentar lo que pegues.
- Añade los claims estándar con los botones rápidos: exp a una hora, un día o siete días vista, iat y nbf con el instante actual, e iss, sub y aud con valores de ejemplo que luego editas.
- Elige el algoritmo y escribe el secret: el token aparece firmado a la derecha en cuanto ambos JSON son válidos. Cópialo con un clic, o comparte un enlace que reproduce el header y el payload sin incluir jamás el secret.
Fórmula
firma = HMACSHA256( base64url(header) + '.' + base64url(payload), secret )
- header
- — JSON con el algoritmo (alg) y el tipo de token (typ)
- payload
- — JSON con los claims: quién es el usuario y hasta cuándo
- secret
- — clave compartida entre quien emite y quien valida
Con HS384 y HS512 cambia únicamente la función hash (SHA-384 o SHA-512). El token final es la concatenación de las tres partes en base64url separadas por puntos. base64url no es base64 corriente: sustituye los caracteres + y / por - y _ y elimina el relleno con =, para que el token pueda viajar dentro de una URL sin escaparlo.
Ejemplo
Un token de sesión con los claims estándar
- Header
- { "alg": "HS256", "typ": "JWT" }
- sub
- 1234567890 (identificador del usuario)
- iss
- https://redutil.com (quién lo emite)
- iat
- 1755691200 (emitido ahora)
- exp
- 1755694800 (una hora después)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.«firma»
El backend recibe ese token, recalcula la firma con su secret y la compara con la que viene en la tercera parte. Si coincide, confía en el payload y sabe que el usuario 1234567890 tiene sesión abierta durante esa hora, sin tener que consultar la base de datos. Pasados los 3600 segundos, el claim exp hace que el mismo token quede rechazado aunque la firma siga siendo correcta.
Ten en cuenta
- Decodificar no es validar. Que esta herramienta muestre el contenido de un token no significa que sea auténtico: sin el secret solo se está leyendo base64url. La comprobación real es la de la firma.
- No guardes datos sensibles en el payload. Contraseñas, documentos de identidad o datos personales quedan a la vista de cualquiera que obtenga el token.
- Los claims exp, iat y nbf van en segundos desde epoch, no en milisegundos. Guardar el valor de Date.now() sin dividir entre mil es el error más frecuente y deja tokens que aparentan caducar dentro de miles de años.
- Solo se admiten los algoritmos simétricos HS256, HS384 y HS512. Los de clave pública (RS256, ES256, EdDSA) se verifican con la clave del emisor, no con un secret compartido, así que la herramienta los identifica y avisa en vez de dar un resultado falso.
- Un token firmado con alg none no está firmado en absoluto. Ningún backend debería aceptarlo: aceptarlo equivale a confiar en cualquier payload que le manden.
- Para trabajar con tokens de producción, revoca o rota el secret después de cualquier prueba. Aquí no sale de tu navegador, pero un secret que ha pasado por un portapapeles compartido o por un historial de terminal deja de ser secreto.
Fuentes
Preguntas frecuentes
Herramientas relacionadas
Formateador y Validador de JSON
Formatea, embellece, valida y minifica código JSON online de forma instantánea.
Generador Visual de JSON Schema
Crea JSON, JSON Schema, Zod y prompts sin escribir una llave.
Generador de Códigos QR
Crea y descarga códigos QR personalizados gratis en alta calidad.