Web y codificación · 6 minutos de lectura
Decodificador JWT: qué hay dentro de un token y qué no
Un token web JSON consta de tres segmentos de URL base64 separados por puntos, y un decodificador JWT simplemente invierte la codificación para que puedas leerlos. Esa última frase contiene el hecho de seguridad más importante de este artículo: decodificar un token no prueba nada al respecto. Cualquiera puede crear una carga útil, codificarla y entregarle un token bien formado; la verificación es una operación independiente que requiere la clave de firma.
Actualizado
las tres partes
- Encabezado: el algoritmo de firma (`alg`) y el tipo de token (`typ`), por ejemplo HS256.
- Carga útil: las afirmaciones: de quién se trata el token, cuándo se emitió y cuándo vence.
- Firma: calculada en los dos primeros segmentos con la clave del emisor, razón por la cual un decodificador la muestra pero no puede verificarla.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 . eyJzdWIiOiIxMjMiLCJleHAiOjE3NjAwMDAwMDB9 . signature
header payload signature
Las afirmaciones que explican la mayoría de los fracasos
- `exp` (vencimiento): la causa más común de un 401. Un token que expiró hace dos minutos se rechaza antes de examinar cualquier otra cosa.
- `nbf` (no antes): la imagen reflejada: un token utilizado antes de que se rechace su ventana de validez.
- `iat` (emitido en): útil para calcular la antigüedad de una sesión y para detectar relojes que no coinciden.
- `aud` (audiencia) y `iss` (emisor): las discrepancias aquí significan que el token es válido pero se emitió para un servicio diferente, lo que falla de manera confusa.
Los reclamos de tiempo son segundos UTC desde la época de Unix. Si un token parece válido pero vence demasiado pronto o tarde, verifique si hay un problema de reloj o una carga útil que transporta milisegundos donde se esperaban segundos.
Por qué nunca debes confiar ciegamente en `alg`
Dos ataques tienen la edad suficiente para ser famosos y todavía aparecen en estado salvaje. El algoritmo `none` le dice al verificador que no hay ninguna firma; un servidor que lee el encabezado en lugar de aplicar su propio algoritmo esperado lo acepta. Y en la confusión RSA/HS, un atacante firma con la clave pública como un secreto HMAC, engañando a un servidor que acepta ambas familias. La defensa en ambos casos reside en el verificador, no en el descodificador: fijar el algoritmo esperado en el lado del servidor y nunca derivarlo del propio token.
Decodifica localmente, siempre
Un JWT es una credencial: quien la posee puede actuar como usuario hasta que caduque. Pegar uno real en un sitio web que lo publica en un servidor entrega una sesión en vivo sin ningún beneficio, ya que la decodificación es una aritmética de URL base64 que cualquier navegador puede realizar en microsegundos. El decodificador YamlBox JWT analiza el token en la página, muestra las indicaciones de la marca de tiempo como fechas UTC legibles y sigue trabajando con la red desactivada: el único tipo de decodificador que vale la pena usar en un token de producción.
Una rutina de depuración que funciona
- Decodifica y lee `exp` primero: la mitad de todos los informes de “tokens no válidos” terminan aquí.
- Verifique `aud` y `iss` con lo que espera el API, luego `nbf` para ver el desfase del reloj.
- Compare las afirmaciones decodificadas con lo que asume su código sobre roles o alcances.
- Si las afirmaciones parecen correctas y aún así fallan, el problema es la verificación: clave incorrecta, secreto rotado o un algoritmo que no coincide.
JWT Decodificador — preguntas frecuentes
¿La decodificación de un JWT lo verifica?
No. La decodificación invierte la codificación base64url y no necesita clave, por lo que no puede demostrar la autenticidad. La verificación vuelve a calcular la firma con la clave pública o secreta del emisor y es un paso separado que solo el servidor puede realizar.
¿Por qué mi JWT ya expiró?
Verifique el reclamo `exp` con la hora UTC actual. Los tokens suelen ser de corta duración (de minutos a una hora) y un cliente que almacena uno en caché durante una ventana de actualización es el culpable habitual. Compare `iat` con `exp` para ver la vida útil prevista por el emisor.
¿Es seguro pegar una producción JWT en un decodificador en línea?
Sólo en uno que se decodifique completamente en su navegador. Un decodificador del lado del servidor recibe una credencial activa y podría registrarla. Prefiere un descodificador del lado del cliente y trata cualquier token que hayas pegado en un sitio desconocido como si estuviera comprometido.
Herramientas mencionadas en esta publicación.
Más artículos para leer
5 minutos de lectura
Base64 decodificar y codificar: para transporte, no para
Base64 decodifica y codifica en el navegador: la regla de tamaño 4/3, el relleno, la variante base64url y el error Unicode que hace que el texto decodificado parezca basura.
5 minutos de lectura
Codificación URL: cuándo escapar y cuándo estás rompiendo
URL codifica y decodifica correctamente: caracteres reservados, más frente a %20, encodeURI frente a encodeURIComponent y los errores de doble codificación detrás de los enlaces rotos.
5 minutos de lectura
Convertidor de marcas de tiempo: época sin conjeturas
Un conversor de marcas de tiempo de Unix que funciona en ambos sentidos: segundos versus milisegundos, UTC versus hora local y el límite de 2038 que aún rompe los sistemas de larga duración.