NewIntroducing QODEX QA Services — platform-powered QA for API-driven teams.Learn more →
QA Learning9 min read

JWT explicado: Estructura, seguridad y mejores prácticas

S
Shreya Srivastava
Content Team

¿Qué es JWT?

Los JSON Web Tokens (JWT) son una forma estandarizada de enviar datos de manera segura entre dos partes. Contienen información (claims) codificada en formato JSON. Estos claims ayudan a compartir detalles específicos entre las partes involucradas.

En esencia, un JWT es un mecanismo para verificar la autenticidad de ciertos datos JSON. Esto es posible porque cada JWT está firmado criptográficamente para garantizar que su contenido no haya sido manipulado durante la transmisión o el almacenamiento.

Es importante señalar que un JWT garantiza la propiedad de los datos, pero no el cifrado. La razón es que el JWT puede ser visto por cualquiera que intercepte el token, ya que está serializado y no cifrado.

Se recomienda firmemente usar JWT con HTTPS, una práctica que se extiende a la seguridad web en general. HTTPS no solo protege la confidencialidad del contenido del JWT durante la transmisión, sino que también proporciona una capa de protección más amplia para los datos en tránsito.

Un JWT es simplemente una cadena de texto que tiene este aspecto:
xxxxx.yyyyy.zzzzz

Tiene 3 partes:

  1. Encabezado (Header): indica el tipo de token (JWT) y el algoritmo utilizado (como HS256).

  2. Carga útil (Payload): contiene los datos reales (como ID de usuario, rol o permisos).

  3. Firma (Signature): garantiza que el token no haya sido modificado por nadie.

¿Cómo funciona JWT?

Cómo funciona la autenticación con JWT

1. El usuario inicia sesión

  • Un usuario ingresa su nombre de usuario y contraseña.

  • El servidor verifica las credenciales.

  • Si son correctas, el servidor crea un JWT que contiene información del usuario (por ejemplo, userId: 123, role: "admin") y lo firma con una clave secreta.

2. El token se envía al cliente

  • El JWT se envía de vuelta al cliente (normalmente en una respuesta de inicio de sesión).

  • El cliente lo almacena de forma segura (localStorage, sessionStorage o cookies).

3. El cliente envía el JWT con las solicitudes

  • Para cada solicitud a una API protegida, el cliente envía el JWT en el encabezado de autorización de esta manera:
    Authorization: Bearer <JWT>

  1. El servidor verifica el JWT

  • El servidor recibe el token.

  • Comprueba la firma usando la clave secreta:

    • Si es válida, confía en los datos del token (como el rol del usuario).

    • Si no es válida, rechaza la solicitud (401 No autorizado).

5. Acceso concedido o denegado

  • Si el token es válido y el usuario tiene los permisos correctos, el servidor permite el acceso.

  • Si no, el servidor deniega el acceso.

JWT

Ejemplo:

  1. El usuario inicia sesión y obtiene un JWT:
    { "userId": 123, "role": "admin" }

  2. El usuario llama a /admin/dashboard con el token.

  3. El servidor verifica que role = "admin".

  4. Acceso concedido.

JWT en microservicios, arquitecturas serverless y distribuidas

En los sistemas distribuidos o serverless modernos, los JWT destacan porque eliminan el estado de sesión compartido. Se puede emitir un token una sola vez y validarlo en todos los servicios sin necesidad de almacenamiento central de sesiones.

Mejores prácticas en contextos distribuidos:

  • Usar firma asimétrica (RS256 / ES256) para que los microservicios puedan validar sin compartir una clave secreta simétrica.

  • Incluir los claims audience (aud), issuer (iss), jti (JWT ID) y nbf (not before) para prevenir ataques de repetición e usos indebidos.

  • Combinar tokens de acceso de corta duración con rotación de tokens de actualización para limitar la exposición.

Esta sección ayuda a los lectores a comprender la escalabilidad y la seguridad real de JWT en sistemas distribuidos.

Para orientación sobre la actualización y revocación de tokens, consulten nuestra Lista de verificación de seguridad de API.

Estructura del JWT

La estructura de un JWT (JSON Web Token) está compuesta por tres partes principales, separadas por puntos (.):

  1. Encabezado (Header)

    • Contiene metadatos sobre el token, como el tipo de token (JWT) y el algoritmo de firma utilizado (por ejemplo, HS256, RS256).

    • Ejemplo:

  2. Carga útil (Payload)

    • Contiene los datos reales (llamados claims) que lleva el token.

    • Los claims pueden ser sobre el usuario (como user_id, role) o metadatos del token (como el tiempo de expiración).

    • Ejemplo:

  3. Firma (Signature)

  • Se crea tomando el encabezado codificado y la carga útil codificada, y luego aplicando la clave secreta con el algoritmo especificado.

  • Garantiza que el token no haya sido manipulado.

  • Fórmula:

El JWT final tiene este aspecto:

  • xxxxx: Encabezado codificado

  • yyyyy: Carga útil codificada

  • zzzzz: Firma

Estructura del JWT

Ejemplo de JWT paso a paso:

  1. Encabezado (antes de la codificación)

Después de la codificación Base64Url, pueden experimentar con la codificación Base64 usando nuestro Codificador Base64 o decodificar tokens existentes con el Decodificador Base64.

  1. Carga útil (antes de la codificación)

Después de la codificación Base64Url:

  1. Firma

Combinamos:

Base64UrlEncode(Header) + "." + Base64UrlEncode(Payload)

Luego lo hasheamos con HMACSHA256 y una clave secreta (por ejemplo, mysecretkey).

Resultado de ejemplo:

El JWT final tiene este aspecto:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImV4cCI6MTcxNjAwMDAwMH0.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

JWT

{Las dos primeras partes pueden decodificarse de nuevo a JSON (encabezado y carga útil), pero la firma solo puede verificarse con la clave secreta. Así es como JWT garantiza la integridad y la confianza.}

Escenarios de ataque comunes y cómo mitigarlos

A continuación se presentan los vectores de ataque comunes contra JWT y los pasos de mitigación accionables:

Ataque / Riesgo

Descripción

Mitigación

Robo de token (XSS / acceso a localStorage)

Los atacantes roban el JWT almacenado en JavaScript del lado del cliente.

Usar cookies HTTP-only, configurar indicadores SameSite y preferir cookies Secure.

Manipulación del algoritmo (ataque "none")

Un atacante fuerza alg = none para eludir la verificación de la firma.

Rechazar tokens con alg: none; solo permitir algoritmos aprobados en una lista blanca.

Confusión o inyección de claves

Uso de claves de firma débiles o incorrectas.

Usar claves criptográficas fuertes, rotarlas regularmente y verificar el kid (ID de clave) en los encabezados JWT.

Ataques de repetición

Los tokens son capturados y reutilizados de forma maliciosa.

Incluir un jti único, validar los claims nbf y exp, y mantener una lista negra o almacén de valores jti revocados.

Tokens de actualización, rotación y estrategias de revocación

Los JWT no admiten revocación de forma inherente, lo que hace que la renovación e invalidación de tokens sean fundamentales. A continuación se presentan estrategias para implementar flujos seguros de actualización y revocación de tokens:

  • Rotación de tokens de actualización: Emitir un nuevo token de actualización por cada solicitud e invalidar el anterior para reducir los riesgos de repetición.

  • Tokens de acceso de corta duración: Usar tiempos de expiración breves (por ejemplo, 5 a 15 minutos) y requerir actualización para continuar el acceso.

  • Lista negra / almacén de tokens: Mantener un almacén ligero de identificadores jti revocados para rechazar tokens comprometidos.

  • Ventana de gracia y detección de reutilización: Permitir una pequeña ventana de superposición para la actualización, pero bloquear la reutilización de tokens de actualización antiguos.

Esto proporciona a los desarrolladores un plan claro para la gestión segura del ciclo de vida de los tokens.

Ejemplo: Crear y validar JWT en Python, Go y Java

Beneficios de JWT

Los principales beneficios de usar JWT (JSON Web Token):

  1. Autenticación sin estado (Stateless Authentication)

    • Los JWT no requieren almacenar datos de sesión en el servidor.

    • El servidor solo verifica el token, lo que lo hace escalable y eficiente.

  2. Compacto y rápido

    • Los JWT son pequeños en tamaño (en formato JSON), por lo que pueden enviarse fácilmente en encabezados, URLs o cookies.

    • Esto los hace rápidos de transmitir entre el cliente y el servidor.

  3. Seguro (cuando se usa correctamente)

    • Los JWT se firman usando algoritmos como HMAC o RSA, garantizando la integridad de los datos.

    • No pueden manipularse a menos que se conozca la clave secreta o privada.

  4. Compatibilidad entre dominios y plataformas

    • Los JWT funcionan bien en sistemas distribuidos, microservicios y APIs.

    • Pueden usarse en aplicaciones móviles, aplicaciones web y distintos dominios.

  5. Autónomo

    • Los JWT contienen toda la información necesaria del usuario (claims) dentro del propio token.

    • Esto reduce las consultas repetidas a la base de datos para la autenticación.

  6. Flexibilidad

    • Los JWT pueden almacenar datos personalizados (roles, permisos, tiempo de expiración).

    • Son útiles para el control de acceso y la seguridad detallada.

  7. Ampliamente adoptado

    • JWT es un estándar (RFC 7519), compatible con muchas bibliotecas, frameworks e idiomas de programación.

En resumen, los JWT hacen que la autenticación sea más simple, rápida y escalable para las aplicaciones web y móviles modernas.

Conclusión

Construir y mantener un inventario de APIs adecuado y usar métodos de autenticación seguros como JWT ya no son opcionales: son esenciales para las organizaciones modernas. Un inventario de APIs actualizado brinda visibilidad a las empresas, mejora el cumplimiento normativo y fortalece la seguridad al garantizar que ninguna API pase desapercibida. Al mismo tiempo, JWT proporciona una forma escalable y segura de gestionar la autenticación, lo que hace que las aplicaciones sean más rápidas y fáciles de administrar.

Al combinar una gestión sólida de APIs con una autenticación confiable, las organizaciones pueden proteger sus activos digitales, reducir riesgos y mejorar la eficiencia. En Qodex.ai, creemos que la seguridad y la simplicidad deben ir de la mano, permitiendo a las empresas innovar sin comprometer la seguridad.


Preguntas frecuentes

¿Qué es un JSON Web Token (JWT) y para qué se utiliza?

Un JSON Web Token, o JWT, es un token compacto y firmado digitalmente que se utiliza para transmitir información de forma segura entre dos partes. Se usa ampliamente para la autenticación y la autorización en aplicaciones web, ya que permite a los servidores verificar la identidad del usuario sin almacenar datos de sesión. Los JWT contienen claims codificados, como roles de usuario o permisos, lo que ayuda a los sistemas a validar las solicitudes de acceso de manera eficiente mientras mantienen una comunicación sin estado.

¿Cómo funciona la autenticación con JWT en las aplicaciones modernas?

La autenticación con JWT funciona emitiendo un token después de que un usuario inicia sesión correctamente. El servidor codifica los datos clave del usuario y los firma con una clave secreta antes de enviárselos al cliente. Cada vez que el cliente realiza una solicitud, incluye el token, lo que permite al servidor verificar su autenticidad. Este proceso sin estado reduce las consultas a la base de datos, mejora la escalabilidad y simplifica la comunicación segura entre microservicios y APIs.

¿Cuáles son los componentes principales de un JWT?

Un JSON Web Token está compuesto por tres partes: el Encabezado (Header), la Carga útil (Payload) y la Firma (Signature), separadas por puntos. El encabezado define el algoritmo utilizado, la carga útil contiene los datos del usuario o los claims, y la firma garantiza la integridad del token mediante un hash criptográfico. En conjunto, estos componentes hacen que los JWT sean livianos y resistentes a la manipulación, lo que los convierte en una opción ideal para la autenticación segura y de alto rendimiento en sistemas distribuidos.

¿Es seguro almacenar JWT en localStorage o en cookies?

Almacenar JWT en localStorage o en cookies depende del modelo de seguridad utilizado. Aunque localStorage simplifica la gestión del token, expone los tokens a ataques XSS si el sitio no está correctamente saneado. Las cookies seguras con HTTP-only son generalmente más seguras, ya que impiden el acceso desde el lado del cliente. Para aplicaciones sensibles, combinar cookies con tiempos de vida cortos de token y tokens de actualización mejora la seguridad de JWT sin afectar la experiencia del usuario.

¿Cómo se comparan los JWT con los tokens OAuth?

Los JWT y los tokens OAuth frecuentemente trabajan juntos, pero cumplen roles diferentes. OAuth es un framework de autorización que define cómo los clientes obtienen tokens, mientras que JWT es un formato de token utilizado dentro de ese proceso. En esencia, OAuth proporciona las reglas y JWT proporciona la estructura. Las implementaciones OAuth basadas en JWT son preferidas para las APIs modernas porque reducen la sobrecarga y admiten una autenticación sin estado y fluida.

¿Cuáles son las mejores prácticas para proteger los JSON Web Tokens?

Para proteger los JWT de manera efectiva, usen siempre claves secretas fuertes o cifrado asimétrico, validen las firmas en cada solicitud y establezcan tiempos de expiración cortos. Eviten almacenar datos confidenciales en las cargas útiles, ya que los JWT solo están codificados en Base64, no cifrados. Implementen mecanismos de revocación de tokens y HTTPS para prevenir la interceptación. Seguir estas prácticas garantiza que la autenticación basada en JWT siga siendo escalable y conforme a los estándares modernos de seguridad de APIs.