Decodificador de JWT
Decodifica JSON Web Tokens localmente y verifica su firma con tu secreto o clave pública, sin enviar nada.
Firma un token propio para probar un endpoint. Todo se calcula en esta página.
La clave y el token terminado se quedan en tu navegador: no se envían a ningún sitio y tampoco viajan en un enlace compartido.
Verifica este token en tu propio código. El fragmento sigue el algoritmo de la cabecera.
Decodificador JWT - decodificar un JSON Web Token online
Pegue un JSON Web Token y este decodificador lo divide en sus tres partes y muestra la cabecera y el payload como JSON legible. Es la vía más rápida para responder a las preguntas que surgen al depurar una autenticación: quién emitió el token, para quién es, con qué algoritmo se firmó y si ya ha caducado.
La decodificación ocurre por completo en su navegador. Aquí eso importa más que en otras herramientas, porque un JWT es una credencial viva: quien captura un token válido puede actuar en nombre de su sujeto hasta que expire. Nada de lo que pegue en esta página se sube, se registra ni se almacena.
Qué es un JSON Web Token
Un JWT son tres segmentos Base64URL unidos por puntos: header.payload.signature. La cabecera indica el algoritmo de firma, el payload lleva los claims - las afirmaciones que el emisor hace sobre el usuario o el cliente - y la firma demuestra que las dos primeras partes las produjo alguien con la clave. Como la cabecera y el payload solo están codificados y no cifrados, cualquiera puede leerlos. Lo único protegido es la firma.
Cómo decodificar un JWT aquí
- Copie el token de la cabecera
Authorization: Bearer, de una cookie, de una URL de retorno o de su cliente de API. - Pegue la cadena completa
header.payload.signatureen el campo de entrada. - Pulse Decodificar para ver los dos objetos JSON.
- Si la petición fue rechazada, mire primero
expy despuésaudeiss.
Qué más hace esta página
El token se lee mientras escribes, así que los paneles se llenan antes de que busques el botón. Bajo la cabecera y el payload decodificados, cada campo aparece en una tabla con su función explicada en palabras claras, y una línea encima convierte exp y nbf en frases: caducó hace tres días, caduca dentro de cincuenta y ocho minutos, todavía no es válido.
- Ejemplo carga un token de demostración con su secreto, para que veas una verificación correcta antes de pegar nada tuyo.
- Verificar acepta el secreto, una clave pública PEM, un JWK suelto o un JWKS completo. Pega el documento de la dirección
/.well-known/jwks.jsondel emisor y se elige sola la clave que indica elkiddel token, así que la página sigue sin hacer ninguna petición propia. Si además rellenas Emisor esperado y Audiencia esperada, una firma válida se comprueba como lo haría un servidor: unissdistinto, o unaudque no contiene tu valor, pone el resultado en rojo. - Crear un token firma uno propio con cualquiera de los doce algoritmos: la página del generador de JWT abre justo ahí.
- Código imprime la verificación del lado del servidor en ocho lenguajes, siguiendo el algoritmo de la cabecera de tu token.
- Otras dos páginas abren esta herramienta apuntando a una sola pregunta: si ha caducado y por qué lo rechazan.
Los claims estándar y su significado
| Claim | Significado | Por qué falla |
|---|---|---|
iss | Emisor: quién creó el token | No coincide cuando se manda un token de staging a producción |
sub | Sujeto: normalmente el ID de usuario o de servicio | Vacío en tokens emitidos para un cliente y no para una persona |
aud | Audiencia: la API que debe aceptarlo | La causa más habitual de un 401 con un token aparentemente válido |
exp | Caducidad como marca de tiempo Unix | Ya pasó, o el reloj del servidor se ha desviado |
nbf | No válido antes de este momento | El token se usó unos segundos demasiado pronto |
iat | Momento de emisión | Sirve para políticas de antigüedad máxima y ventanas de revocación |
jti | ID único del token | Necesario para bloquear un token concreto |
Decodificar no es verificar
Este es el punto que más confunde. Leer un token le dice lo que afirma, no si esa afirmación es auténtica. Verificar significa recalcular la firma con el secreto o la clave pública del emisor y compararla, además de comprobar la caducidad y la audiencia. Cualquier decodificador muestra el payload de un token falsificado con la misma naturalidad que el de uno real, así que nunca tome una decisión de autorización basándose solo en el contenido decodificado: verifique en el servidor con una biblioteca mantenida.
Diagnóstico de un token que no funciona
- 401 con un token válido: compare
audcon lo que espera la API eisscon la URL de emisor configurada. Escriba ambos valores en Emisor esperado y Audiencia esperada y pulse Verificar: el resultado indica el valor que el token lleva en realidad. - Caducado al instante: convierta
expcon el conversor de timestamp Unix y compárelo con el reloj del servidor, no con el de su portátil. - Error de segmento inválido: el token se truncó, se codificó como URL por el camino o se coló un salto de línea al copiar.
- Falla la verificación de firma: la clave rotó, se usó un identificador de clave incorrecto o el token lo firmó otro entorno.
algvalenone: rechácelo. Ese valor indica un token sin firmar y es un ataque clásico contra validaciones descuidadas.
Buenas prácticas de seguridad
- No guarde datos personales, identificadores internos ni nada confidencial en el payload: es legible por diseño.
- Mantenga los tokens de acceso con vida corta y use un refresh token para sesiones largas.
- Transmita los tokens solo por HTTPS y prefiera cookies secure y HttpOnly al almacenamiento del navegador.
- Rote las claves de firma de forma programada y publíquelas en un endpoint JWKS para que los clientes las sigan.
- Considere expuesto cualquier token que haya pegado en una herramienta online, y ese es justo el motivo por el que esta no lo envía a ninguna parte.
Funciona sin conexión en su navegador
El decodificador es JavaScript de cliente. Una vez cargada la página puede decodificar tokens sin ninguna conexión de red, y las credenciales de producción no salen nunca de su equipo.
Decodificar un JWT en código o desde la terminal
| Dónde | Cómo |
|---|---|
| JavaScript (npm) | import { jwtDecode } from 'jwt-decode'; jwtDecode(token) - solo el payload, sin verificación |
| Python (PyJWT) | jwt.decode(token, options={'verify_signature': False}) para leerlo, o pasa la clave para verificar |
| Bash | echo $TOKEN | cut -d. -f2 | tr '_-' '/+' | base64 -d 2>/dev/null - Base64URL omite el relleno, así que un payload corto puede necesitar == al final |
| Consola del navegador | JSON.parse(atob(token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/'))) |
Todas estas opciones leen el token sin comprobar la firma, lo cual está bien para depurar y mal para autorizar; mira la sección de arriba.
Herramientas relacionadas
Los tokens viven entre varios formatos. Lea los segmentos crudos con el decodificador Base64, ordene el payload con el formateador JSON, convierta exp e iat en fechas con el conversor de timestamp y limpie un token sacado de una URL con el decodificador de URL.