Depurador de JWT
Un 401 con un token que parece correcto casi siempre se debe a una de seis cosas. Esta página te enseña el token tal como lo lee el servidor, para que descubras cuál es.
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.
Depurar un JSON Web Token que está siendo rechazado
Los tokens fallan de unas pocas maneras, y ninguna se ve en el token mismo: son tres trozos de Base64URL con puntos en medio. Pégalo aquí y se convierte en algo con lo que se puede discutir: cada campo de la cabecera y cada claim, en una tabla que dice para qué sirve cada uno, con la caducidad traducida a palabras claras y la firma comprobada contra la clave que tengas.
Se decodifica mientras escribes y no se envía a ningún sitio. En una página así conviene decirlo sin rodeos, porque lo que estás a punto de pegar es una credencial en funcionamiento de la cuenta de alguien.
Los seis fallos, en el orden que conviene
| Qué ha fallado | Cómo se ve aquí | Solución |
|---|---|---|
| Caducado | La línea sobre la cabecera dice "Caducó…" | Renueva el token; si va por segundos, revisa los relojes |
| Audiencia equivocada | aud nombra otra API | Pide el token para la audiencia que espera la API |
| Emisor equivocado | iss es la URL de staging, no la de producción | Apunta el cliente al emisor correcto, o la API al que toca |
| Clave equivocada | Verificar dice que la firma no coincide | Usa la clave con la que firmó el emisor; ojo con los secretos en Base64 |
| Algoritmo equivocado | La cabecera dice ES256 y tu clave es RSA | Haz que la clave encaje con el algoritmo que aparece junto al campo |
| No es un JWS | La página lo llama JWE, con cinco partes | El contenido está cifrado; léelo donde esté la clave de descifrado |
El orden importa. La caducidad y la audiencia no necesitan clave ni la colaboración de nadie, así que se descartan en segundos; perseguir un problema de firma que acaba siendo un aud mal puesto es como se va una tarde entera.
Leer no es verificar
Esta es la distinción con la que más gente tropieza. Decodificar te dice lo que un token afirma; no dice nada sobre si eso es cierto, porque la cabecera y el payload están codificados, no cifrados, y cualquiera puede escribir los suyos. Verificar significa recalcular la firma con el secreto o la clave pública del emisor —cosa que esta página hace en tu navegador— y es el único paso que convierte una afirmación en un hecho.
Usa entonces la vista decodificada para formarte una hipótesis y el botón Verificar para ponerla a prueba, y no dejes nunca que una decisión de autorización en tu propio código se apoye en contenido decodificado. Para eso mismo está la pestaña Código, que imprime la comprobación del lado del servidor en ocho lenguajes. Si lo que te desconcierta es la codificación, la diferencia entre Base64 y Base64URL explica por qué un segmento de JWT no se puede pegar sin más en un decodificador de Base64 corriente.
Cosas que parecen problemas del token y no lo son
- La palabra
Bearercopiada junto al token, o un salto de línea traído de la terminal: ambos cambian la entrada que se firmó y rompen la firma. - Un token cortado por un visor de registros. El segmento de firma tiene una longitud fija por algoritmo, así que uno truncado falla siempre.
- Dos servicios que comparten un secreto y uno de ellos lo guarda en Base64. Marca El secreto está en Base64 para reproducir ese lado.
- Un
kidque ya no existe porque el emisor rotó sus claves; el token está bien, lo que está caduco es el juego de claves.
Una vez descartado el token, los sospechosos que quedan están en el servidor: un middleware que no valida nunca, un reloj que se desvía, una caché con un juego de claves antiguo. Si necesitas un token en un estado conocido para probar cualquiera de esas cosas —caducado, vigente, firmado con una clave tuya—, el generador de JWT lo construye, y el comprobador de caducidad explica cómo lee un verificador los claims de tiempo.