Decodificar el payload de un token JWT con Base64
Los tokens JWT (JSON Web Tokens) son cadenas de tres partes separadas por puntos, donde el header y el payload están codificados en Base64url. Decodificar el payload de un JWT permite leer los claims que contiene: el identificador de usuario, la fecha de caducidad (exp), la fecha de emisión (iat) y cualquier dato adicional que el servidor haya incluido. El Codificador Base64 de WikiPlus puede decodificar estas partes al instante, aunque para verificar la firma del JWT necesitarás la clave secreta del servidor.
Estructura de un token JWT
Un JWT tiene el formato 'header.payload.signature'. Las tres partes están separadas por puntos. El header y el payload son objetos JSON codificados en Base64url. La firma es un HMAC o una firma RSA que garantiza que el token no ha sido manipulado. Para leer el contenido del payload: toma la segunda parte (entre el primer y el segundo punto), cámbia los '-' por '+' y los '_' por '/' para convertir de Base64url a Base64 estándar, y decodifica. El resultado es un JSON con los claims del token: sub (subject/usuario), exp (expiration/caducidad en Unix timestamp), iat (issued at/emisión), y cualquier claim personalizado que el servidor haya incluido.
Claims más importantes del payload JWT
Los claims estándar definidos por el RFC 7519 son: 'iss' (issuer: quién emitió el token), 'sub' (subject: identificador del usuario), 'aud' (audience: para quién es el token), 'exp' (expiration time: caducidad en segundos Unix), 'nbf' (not before: el token no es válido antes de esta fecha), 'iat' (issued at: cuándo se emitió en segundos Unix) y 'jti' (JWT ID: identificador único del token). Al depurar problemas de autenticación, los claims más importantes a verificar son 'exp' (para ver si el token ya caducó) y 'sub' (para verificar qué usuario se autenticó). El conversor de timestamps de WikiPlus puede convertir los valores de 'exp' e 'iat' a fechas legibles.
Por qué decodificar un JWT no equivale a verificarlo
Decodificar el payload de un JWT es trivial y solo requiere un decodificador Base64. Pero verificar que el JWT es auténtico y no ha sido manipulado requiere validar la firma con la clave secreta (HMAC-SHA256) o la clave pública (RS256/ES256). Un atacante podría crear un JWT con cualquier payload decodificable, incluyendo claims de 'admin: true', que parecería válido al leerlo pero cuya firma no coincidiría con la del servidor. Nunca confíes solo en el contenido legible de un JWT: siempre verifica la firma en el servidor antes de usar los datos del payload.
Usando Base64 para depurar autenticación OAuth y OIDC
En flujos OAuth 2.0 y OpenID Connect, los access tokens y ID tokens son JWTs. Al depurar por qué una llamada a la API devuelve 401 Unauthorized, decodificar el token con el herramienta de Base64 permite verificar: si el claim 'exp' ya ha pasado (token caducado), si el claim 'aud' (audience) corresponde al servicio que lo recibe, si el claim 'scope' incluye el permiso necesario para el endpoint al que se llama, y si el claim 'sub' corresponde al usuario correcto. Estos checks permiten diagnosticar el 90% de los problemas de autenticación sin necesidad de añadir logs al servidor.
Preguntas frecuentes
- ¿Cómo decodifico el payload de un JWT con Base64 de WikiPlus?
- Toma el fragmento entre el primer y segundo punto del JWT. Por ejemplo, si el token es 'eyJhbG.eyJzdWI.SflKxw', copia 'eyJzdWI'. Luego reemplaza los guiones (-) por signos más (+) y los guiones bajos (_) por barras (/). Pega el resultado en el decodificador Base64 y obtendrás el JSON con los claims del payload. Alternativamente, activa la opción 'Base64url' en la herramienta, que hace la sustitución automáticamente.
- ¿El decodificador almacena los tokens que pego?
- No. El procesamiento es completamente local en tu navegador usando las APIs btoa/atob de JavaScript. Ninguna parte del token se transmite a ningún servidor. Puedes verificarlo con las DevTools del navegador: la pestaña Red no mostrará ninguna petición cuando decodifiques. Esto es importante porque los tokens JWT frecuentemente contienen datos de usuario sensibles.
- ¿Puedo usar la herramienta para decodificar el header del JWT también?
- Sí. El header del JWT es el primer fragmento antes del primer punto. También está codificado en Base64url y contiene el algoritmo de firma ('alg') y el tipo de token ('typ'). Por ejemplo, el header típico decodificado es {"alg":"HS256","typ":"JWT"}. Aplica el mismo proceso que para el payload para decodificarlo.