Toolram
Desarrollador

Qué es un JWT y cómo decodificarlo sin filtrar el token (2026)

JSON Web Tokens explicados de forma simple: estructura, qué información llevan, cómo decodificarlos sin enviar el token a un servidor de terceros.

Por José Gaspard·27 de mayo de 2026· 6 min

Qué es un JWT

JWT = JSON Web Token. Es un formato estándar (RFC 7519) para transmitir información firmada entre partes. Lo usan APIs, autenticación OAuth, sessions modernas y casi cualquier sistema distribuido.

Un JWT se ve así:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Tres partes separadas por punto:

  1. Header (algoritmo + tipo)
  2. Payload (los datos / claims)
  3. Signature (firma criptográfica)

Cada parte está codificada en Base64URL (variante de Base64 con caracteres URL-safe).

Cómo decodificarlo

En JavaScript

const token = "eyJ...XYZ";
const [headerB64, payloadB64, sigB64] = token.split(".");
const header = JSON.parse(atob(headerB64));
const payload = JSON.parse(atob(payloadB64));
console.log({ header, payload });

En Toolram

JWT Decoder — pegás el token y obtenés header + payload formateados. 100% client-side — el token nunca sale de tu navegador.

Por qué NO usar jwt.io con tokens de producción

jwt.io es la herramienta más popular para decodificar JWTs. Procesa el token en el server. Si pegás un token de producción válido:

  • Queda potencialmente en logs del servicio
  • Si alguien con acceso al backend de jwt.io quisiera, podría usarlo durante su tiempo de vida
  • Si tu token tiene info sensible (email, ID, scope), esa info salió de tu control

Regla: NUNCA decodifiques tokens de producción válidos en herramientas online server-side. Usá client-side (Toolram) o local en tu terminal.

Qué información típica lleva un JWT

Payload típico:

{
  "sub": "1234567890",          // subject (user ID)
  "name": "John Doe",
  "email": "john@example.com",
  "iat": 1516239022,            // issued at
  "exp": 1516242622,            // expires
  "iss": "https://api.example.com",  // issuer
  "aud": "my-api",              // audience
  "scope": "read:users write:posts"
}

Claims estándar:

  • iss — issuer
  • sub — subject (user ID)
  • aud — audience
  • exp — expiration time
  • nbf — not before
  • iat — issued at
  • jti — JWT ID (unique)

La firma: ¿qué garantiza?

La signature se calcula así:

signature = HMAC-SHA256(
  base64(header) + "." + base64(payload),
  secret
)

Garantiza:

  • El token no fue modificado en tránsito
  • Solo quien tiene el secret pudo haberlo firmado

NO garantiza:

  • Confidencialidad del payload (todos pueden decodificar y leer)
  • Que el token no esté revocado (necesitarías un backend con allowlist/blocklist)

Casos de uso comunes

  • Authentication: API issues JWT al login, cliente lo envía en cada request via Authorization: Bearer <token>
  • OAuth 2.0 flows
  • Single Sign-On (SSO) entre apps
  • Webhook signatures (Stripe, GitHub, etc.)

Próximos pasos

Preguntas frecuentes

¿Es seguro decodificar JWTs en sitios web?

Solo si son CLIENT-SIDE. Sitios como jwt.io procesan server-side, pueden loggear tokens. Toolram decodifica con JavaScript en tu navegador — el token nunca se envía. Igual: NUNCA pegues tokens válidos de producción en NINGUNA herramienta online — siempre puede haber un MITM o extensión maliciosa.

¿El payload de un JWT está encriptado?

No. Está solo CODIFICADO en Base64URL, que es trivial de decodificar. Cualquiera con el JWT puede leer el contenido. La SIGNATURE garantiza integridad (no fue modificado), no confidencialidad. Si necesitás encriptar, usá JWE (JSON Web Encryption).

¿Cómo verifico la firma de un JWT?

Necesitás el secret (HMAC) o la public key (RSA/EC) del issuer. Recalculás HMAC-SHA256(header + . + payload, secret) y comparás con la signature recibida. Toolram solo DECODIFICA — no verifica firma porque eso requiere acceso al secret, que nunca debería compartirse.

Qué es un JWT y cómo decodificarlo sin filtrar el token (2026) | Toolram