Cómo funcionan los JSON Web Tokens (JWT) con ejemplos

Aprende la estructura de un JWT, cómo se firman y verifican, y errores habituales de seguridad. Incluye ejemplos prácticos.

4 de febrero de 20262 min de lecturaJWT Decoder
Desarrollo

Los JSON Web Tokens (JWT) son uno de los estándares más usados para autenticación y transmisión de información entre partes de forma compacta. En este artículo verás cómo están hechos, cómo se firman y qué errores conviene evitar.

¿Qué es un JWT?

Un JWT es una cadena de texto con tres partes separadas por puntos (.):

  1. Header: algoritmo y tipo de token (p. ej. HS256, JWT).
  2. Payload: claims o “datos” (usuario, rol, expiración, etc.).
  3. Signature: firma que garantiza que el token no fue modificado.

Cada parte está codificada en Base64URL. Por eso puedes “decodificar” un JWT y leer header y payload sin tener el secreto; la firma es lo único que protege la integridad.

Estructura de un JWT real

Un ejemplo típico se ve así:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikp1YW4gUMOpcmV6IiwiZXhwIjoxNzA2OTAwMDAwfQ.abc123firma
  • Primera parte (header): {"alg":"HS256","typ":"JWT"}.
  • Segunda parte (payload): {"sub":"1234567890","name":"Juan Pérez","exp":1706900000}.
  • Tercera parte: la firma HMAC-SHA256 del contenido de las dos partes anteriores.

No guardes contraseñas ni datos muy sensibles en el payload: cualquiera puede decodificarlo.

Cómo se genera la firma

Con HS256, el servidor usa una clave secreta compartida y aplica HMAC-SHA256 sobre base64(header).base64(payload). Si alguien cambia un byte del payload, la firma deja de coincidir y el token se considera inválido.

Con RS256, el servidor firma con la clave privada y cualquiera con la clave pública puede verificar. Es útil cuando varios servicios tienen que validar el token sin tener el secreto.

Errores habituales de seguridad

  • Almacenar secretos en el payload: el payload es legible; no pongas contraseñas ni datos críticos sin cifrado adicional.
  • No verificar la firma: siempre validar la firma y el algoritmo (evitar “alg”: “none” o cambios de algoritmo).
  • No comprobar exp (expiración): los tokens deben tener fecha de caducidad y el backend debe comprobarla.
  • Claves débiles o expuestas: en HS256, una clave corta o filtrada permite falsificar tokens.

Resumen

Un JWT te da un “dato firmado” que el cliente puede enviar en cada petición (p. ej. en el header Authorization) y el servidor solo tiene que verificar la firma y los claims. Es útil para APIs y sesiones stateless, siempre que no guardes información sensible en el payload y uses buenas prácticas de firma y expiración.

Si quieres inspeccionar un token sin programar, puedes usar nuestra herramienta gratuita para decodificar header y payload al instante.

Preguntas frecuentes

¿Un JWT es seguro?
Depende de cómo se use. Si se firma con un secreto fuerte (HMAC) o se verifica con la clave pública (RSA), y no se guardan datos sensibles en el payload sin cifrar, puede ser seguro. Evita enviar secretos en el payload.
¿Se puede decodificar un JWT sin el secreto?
Sí. Header y payload están en Base64URL y son legibles por cualquiera. Por eso no debes guardar datos sensibles ahí. Lo que no se puede es falsificar la firma sin conocer el secreto (o la clave privada en RS256).
¿Cuándo usar JWT?
Es útil para sesiones stateless, APIs entre servicios, identificación de usuarios en single-page apps y cuando el backend no quiere guardar sesiones en base de datos. No es la única opción; cookies firmadas son a veces más simples.
¿Qué es el algoritmo HS256 vs RS256?
HS256 usa una sola clave secreta para firmar y verificar (simétrica). RS256 usa par clave pública/privada: solo la privada firma y cualquiera con la pública puede verificar, ideal para varios consumidores.

¿Te gustó este artículo?

Compártelo con tu red

Artículo anterior

Contraseñas seguras: mejores prácticas y cómo generar una buena contraseña

Siguiente artículo

Codificar URL: por qué y cómo codificar caracteres en una URL

¿Listo para usar nuestras herramientas?

Prueba nuestras herramientas gratuitas sin registro. Formateador JSON, JWT Decoder, generador de contraseñas y más.

Ver todas las herramientas