Mcatorce Suite
← Volver al blog

Cómo decodificar un JWT y entender qué contiene

La estructura de un JSON Web Token, qué información guarda cada parte y por qué decodificar no es lo mismo que verificar la firma.

Prueba la herramienta: Decodificador de JWT

Un JWT (JSON Web Token) es una cadena que se usa para transportar información de autenticación entre un cliente y un servidor. Aparece constantemente en cabeceras Authorization: Bearer ..., en cookies de sesión y en enlaces de acceso único. Saber leer su contenido es útil para depurar problemas de inicio de sesión, permisos o caducidad.

Cómo está construido un JWT

Un JWT tiene tres partes separadas por puntos:

xxxxx.yyyyy.zzzzz
  1. Encabezado (header). Un objeto JSON codificado en Base64URL que indica el algoritmo de firma (HS256, RS256...) y el tipo de token.
  2. Carga útil (payload). Otro objeto JSON en Base64URL con las "claims": el identificador del usuario (sub), quién emitió el token (iss), para quién es (aud), cuándo caduca (exp), cuándo se emitió (iat) y cualquier dato personalizado que la aplicación añada (roles, permisos, nombre).
  3. Firma. El resultado de firmar el encabezado y la carga con una clave secreta o privada. Es lo que permite al servidor confiar en que el token no se ha modificado.

Las dos primeras partes no están cifradas, solo codificadas. Cualquiera que tenga el token puede leer su contenido. Por eso nunca se debe poner información sensible en la carga útil.

Decodificar no es verificar

Este es el punto más importante y el que más confusión genera:

  • Decodificar consiste en pasar de Base64URL a texto y leer el JSON. No requiere ninguna clave y lo puede hacer cualquiera.
  • Verificar consiste en recalcular la firma con la clave correcta y comprobar que coincide, además de revisar que el token no haya caducado y que el emisor y la audiencia sean los esperados. Esto solo lo puede hacer quien tiene la clave, y siempre debe ocurrir en el servidor.

Una herramienta de navegador puede mostrarte el contenido de un token, pero no debe pedirte la clave secreta ni pretender validar la firma: eso solo tiene sentido en un entorno de confianza.

Cómo inspeccionar un token en el navegador

El decodificador de JWT de Mcatorce Suite separa las tres partes, decodifica el encabezado y la carga útil, los muestra como JSON con formato y calcula si el token ya ha caducado a partir de la claim exp. Todo ocurre en local: el token no se envía a ningún servidor, lo que es importante porque un token de acceso válido es equivalente a una sesión abierta.

Errores habituales al trabajar con JWT

  • Confundir exp con milisegundos. El campo exp está en segundos desde 1970, no en milisegundos. Multiplicar mal por 1000 provoca tokens que parecen caducados en 1970 o válidos hasta el año 50000.
  • Almacenar el token en localStorage sin pensar en XSS. Si un atacante ejecuta JavaScript en tu página, puede leer el token. Muchas aplicaciones prefieren una cookie HttpOnly.
  • Meter demasiados datos en la carga. Cada petición envía el token entero; una carga de varios kilobytes penaliza todas las llamadas.
  • Olvidar validar iss y aud. Un token con firma válida pero emitido para otra aplicación no debería aceptarse.

Preguntas frecuentes

¿Puedo modificar la carga útil de un token? Puedes cambiar el texto, pero la firma dejará de coincidir y cualquier servidor que verifique correctamente lo rechazará.

¿Un JWT caduca solo? El servidor decide rechazarlo cuando la fecha actual supera exp. El token en sí no cambia; simplemente deja de aceptarse.

¿Es seguro pegar un token en esta herramienta? El token no sale de tu navegador. Aun así, trata cualquier token de acceso real como una credencial y evita compartirlo.