Volver al blog

Qué es un JWT y cómo decodificarlo de forma segura

2026-05-224 min de lectura

Los JSON Web Tokens (JWT) son el formato de autenticación estándar en APIs REST, flujos OAuth y aplicaciones de una sola página. Parecen cadenas aleatorias, pero cada uno codifica datos estructurados que puedes leer en segundos, sin necesidad de llamar al servidor.

Estructura de un JWT: tres secciones

Un JWT son tres cadenas codificadas en Base64URL unidas por puntos: cabecera.payload.firma. Se reconocen al instante porque empiezan por "eyJ" (la codificación Base64 de la llave de apertura de un objeto JSON).

  • Cabecera: el algoritmo usado para firmar el token (p. ej., HS256, RS256) y el tipo de token ("JWT").
  • Payload: los claims — datos que el servidor ha incluido, como el ID de usuario, el correo, los roles y la fecha de expiración.
  • Firma: una suma de verificación criptográfica. Sin la clave secreta, la firma no se puede falsificar ni verificar en el lado del cliente.

Decodificar vs. verificar — una distinción crítica

Decodificar significa leer la cabecera y el payload invirtiendo la codificación Base64. Cualquiera puede hacerlo, sin necesidad de ninguna clave. Verificar comprueba que la firma es válida, es decir, que el token fue firmado por un servidor de confianza. La verificación debe hacerse siempre en el servidor antes de fiarse de cualquier claim para autorizar acciones. Decodificar te dice qué hay dentro; no te dice si puedes confiar en ello.

Claims habituales que conviene revisar

  • sub — sujeto, normalmente el ID de usuario.
  • exp — tiempo de expiración como timestamp Unix. Un token que supere este valor no es válido.
  • iat — tiempo de emisión, cuándo se creó el token.
  • iss — emisor, qué servidor o servicio generó el token.
  • roles o permissions — claims personalizados para el control de acceso.

Cómo decodificar un JWT en línea

  1. Copia tu JWT desde la pestaña de red del navegador, la respuesta de la API o una cookie de autenticación.
  2. Abre la herramienta Decodificador JWT.
  3. Pega el token en el campo de entrada.
  4. Lee la cabecera y el payload decodificados — se muestran como JSON formateado.
  5. Comprueba el campo exp: es un timestamp Unix. Conviértelo a una fecha legible para verificar que el token no ha expirado.

Tip: La sección payload es simplemente JSON codificado en Base64URL. También puedes pegar solo la parte central del token (entre los dos puntos) en la herramienta Decodificar Base64 para leerla.

Notas de seguridad

  • Nunca pegues un JWT de producción con claims sensibles en un decodificador de terceros que no controles. El payload es legible: trátalo como una contraseña cuando contenga datos de usuario.
  • Los JWT están firmados, no cifrados por defecto. Cualquiera que intercepte el token puede leer los claims. Usa HTTPS para evitar la interceptación.
  • Decodificar un token en el navegador no lo valida. Las decisiones de autorización deben tomarse siempre en el servidor, donde está disponible la clave de firma.
  • Presta atención al ataque "alg: none" — un token malformado que afirma no necesitar firma. Las bibliotecas bien configuradas lo rechazan automáticamente.

Herramientas relacionadas

Jwt Decoder
Qué es un JWT y cómo decodificarlo de forma segura | Blog de Utilikits | Utilikits