Guía

Decodificar un JWT no verifica su firma

Aprende qué información muestra un decodificador JWT, qué comprobaciones faltan y por qué nunca debes confiar en claims sin verificar la firma.

por Tools in a Tab · Publicado el · Revisado el

Respuesta breve

Decodificar un JWT solo transforma sus segmentos Base64URL en información legible. No demuestra que el emisor sea auténtico, que la firma sea válida ni que el token deba aceptarse. Antes de autorizar una acción, el servidor debe verificar criptografía, algoritmo, emisor, audiencia y claims temporales según su propia política.

Qué hace un decodificador

Un JWT firmado con representación compacta suele tener tres segmentos:

cabecera.payload.firma

Los dos primeros pueden decodificarse sin conocer una clave. Por eso cualquiera puede leer y también fabricar una cabecera y un payload que digan, por ejemplo, "role":"admin". Ver esos datos en pantalla no indica que la firma del tercer segmento corresponda al emisor esperado.

El decodificador JWT de Tools in a Tab sirve para inspeccionar estructura y claims localmente. Señala de forma expresa que no verifica firmas. Tampoco debes pegar tokens de producción en servicios que no controles; un token puede contener identificadores o permisos aunque su contenido no esté cifrado.

Qué debe verificar el sistema que confía en el token

El RFC 8725 recoge prácticas de seguridad para JWT. Entre las comprobaciones importantes están:

  • permitir solo los algoritmos previstos y no aceptar el que proponga el token sin una política;
  • validar la firma con la clave correcta;
  • comprobar que iss identifica al emisor esperado;
  • comprobar que aud incluye al destinatario correcto;
  • aplicar exp, nbf y cualquier requisito propio del protocolo;
  • usar reglas distintas para tipos de JWT que no sean intercambiables.

Una biblioteca mantenida puede ejecutar estas operaciones, pero necesita una configuración segura. «La función no devolvió error» tampoco sustituye a revisar qué algoritmo, claves y claims se exigieron.

Ejemplo de decisión correcta

Si el payload afirma que exp vale 1786204800, puedes usar el conversor de timestamp Unix para entender la fecha. Esa conversión solo explica el número. La aceptación real requiere que un verificador confirme primero la firma y después compare exp con el reloj y la tolerancia definidos por el servidor.

Regla práctica

Usa la decodificación para depurar y comprender. Usa una verificación criptográfica completa, en el componente que toma la decisión, para confiar. Nunca concedas acceso desde datos que solo has leído del payload.