🎫
← Volver a guías

¿Qué es JWT? Una guía completa de los JSON Web Token

· Etiquetas: what-is-jwt, jwt-authentication, jwt-guide, api-security, token-based-auth

¿Qué es JWT?

JSON Web Token (JWT) es un estándar abierto (RFC 7519) que define una forma compacta y autónoma de transmitir información de forma segura entre partes como un objeto JSON. Los JWT son el formato de token dominante en las aplicaciones web modernas, y se usan para todo, desde la autenticación de usuarios y la autorización de API hasta el intercambio seguro de datos entre microservicios.

Cómo funciona la autenticación con JWT

La autenticación con JWT sigue un patrón sin estado que elimina la necesidad de almacenamiento de sesiones en el servidor. Comprender este flujo es clave para entender por qué los JWT se han convertido en la opción predeterminada para la seguridad de las API modernas.

El flujo de autenticación

  1. El usuario inicia sesión — El cliente envía las credenciales (nombre de usuario y contraseña) al servidor de autenticación.
  2. El servidor crea un JWT — El servidor valida las credenciales, crea un JWT que contiene la identidad y los permisos del usuario, lo firma con una clave secreta o privada y lo devuelve al cliente.
  3. El cliente almacena el token — El cliente guarda el JWT, normalmente en localStorage, sessionStorage o en una cookie HTTP-only.
  4. El cliente envía el token con cada solicitud — Para cada solicitud posterior a la API, el cliente incluye el JWT en el header Authorization usando el esquema Bearer: Authorization: Bearer <token>.
  5. El servidor verifica el token — El servidor verifica la signature del JWT, comprueba el tiempo de expiración y extrae los claims del usuario para autorizar la solicitud.
  6. No se requiere ninguna consulta de sesión — Como el JWT contiene toda la información necesaria, el servidor no necesita consultar una base de datos ni una caché para identificar al usuario.

Por qué esto importa

La autenticación tradicional basada en sesiones almacena los ID de sesión en la memoria o en la base de datos del servidor. Cada solicitud autenticada requiere una consulta. Los JWT eliminan esta consulta: el propio token demuestra la identidad del usuario. Esto hace que los sistemas basados en JWT sean inherentemente escalables, porque cualquier servidor de un clúster puede verificar un token sin estado de sesión compartido.

JWT frente a la autenticación basada en sesiones

| Aspecto | Autenticación con JWT | Autenticación basada en sesiones | |--------|--------------------|------------------------------| | Almacenamiento | En el cliente (en el token) | En el servidor (en memoria o en la base de datos) | | Escalabilidad | No se necesita un almacén de sesiones compartido | Requiere un almacén de sesiones compartido entre instancias | | Entre dominios | Funciona de forma natural entre dominios | Difícil de compartir sesiones | | Compatible con móviles | Sí (no requiere cookies) | Requiere soporte de cookies | | Revocación | Difícil (hasta que el token expire) | Fácil (eliminar la sesión del almacén) | | Tamaño del payload | Mayor por solicitud (token en el header) | Mínimo (solo el ID de sesión) |

Por qué se usa JWT para la seguridad de API

Las características que hacen que JWT sea adecuado para la autenticación también lo hacen ideal para asegurar las API.

Sin estado y escalable

Cada JWT transporta toda la información que el servidor necesita para autorizar una solicitud. No hay una base de datos de sesiones que consultar, ni una caché que revisar, ni estado que sincronizar entre servidores. Los balanceadores de carga pueden enrutar las solicitudes a cualquier instancia del servidor sin coordinación.

Entre dominios y entre orígenes

JWT funciona de forma natural entre distintos dominios y orígenes. Un token emitido por auth.example.com puede usarse para acceder a api.example.com y a admin.example.com. Esto convierte a JWT en la base de los sistemas de inicio de sesión único (SSO).

Autorización de grano fino

El payload del JWT puede incluir claims personalizados para roles, permisos y pertenencias a organizaciones:

{
  "sub": "user_abc123",
  "role": "admin",
  "permissions": ["read:users", "write:users", "delete:users"],
  "org_id": "org_xyz789",
  "iat": 1516239022,
  "exp": 1516325422
}

El servidor de la API lee estos claims directamente del token sin ninguna consulta adicional.

JWT para el inicio de sesión único (SSO)

El inicio de sesión único es uno de los casos de uso más comunes de JWT. En una arquitectura SSO típica:

  1. Un usuario inicia sesión en el proveedor de identidad (IdP), como Auth0, Okta o Keycloak.
  2. El IdP emite un JWT firmado con su clave privada.
  3. El usuario presenta este JWT a múltiples aplicaciones.
  4. Cada aplicación verifica la signature usando la clave pública del IdP.
  5. Cada aplicación confía en el token sin comunicarse con el IdP en cada solicitud.

Este patrón permite que un único inicio de sesión conceda acceso a docenas de servicios — correo electrónico, almacenamiento de archivos, gestión de proyectos, sistemas de RR. HH. — sin que cada servicio implemente su propio flujo de inicio de sesión.

Mejores prácticas de seguridad con JWT

Aunque JWT proporciona bases sólidas para la seguridad de las API, una implementación correcta es esencial.

Mantén los tokens de corta duración

Establece el claim exp (expiración) con una duración corta: de 15 minutos a 1 hora para los tokens de acceso. Usa refresh tokens de mayor duración (días o semanas) para obtener nuevos tokens de acceso sin requerir que el usuario se vuelva a autenticar.

Usa siempre HTTPS

JWT no cifra su payload. Cualquiera que intercepte el token puede decodificarlo y leer su contenido. Transmite siempre los JWT a través de HTTPS para evitar la interceptación.

Valida todo

Verifica siempre la signature, comprueba que el token no haya expirado, confirma que el aud (audiencia) coincide con tu aplicación y rechaza tokens con algoritmos inesperados.

Almacena los tokens de forma segura

En el lado del cliente, almacena los JWT en cookies HTTP-only cuando sea posible, o en memoria para aplicaciones de una sola página. Evita localStorage para tokens que otorgan acceso a datos sensibles.

Conceptos erróneos comunes sobre JWT

«JWT está cifrado». — No. JWT está firmado, no cifrado. El payload está codificado en base64url, que es reversible. JWE (JSON Web Encryption) proporciona cifrado, pero es una especificación aparte que no cubre el JWT estándar.

«JWT previene el CSRF». — No por sí solo. Un JWT en un header Authorization ayuda, pero si el token está en una cookie, la protección contra CSRF sigue siendo necesaria.

«JWT es solo para autenticación». — JWT se usa para autenticación, pero también para el intercambio de datos de autorización, sesiones sin estado y el intercambio seguro de información entre servicios.

Decodifica y explora JWT en línea

Usa la herramienta de decodificador de JWT para inspeccionar cualquier JSON Web Token. Pega tu token y verás al instante el header, el payload y el algoritmo de la signature decodificados. La herramienta te ayuda a comprender qué datos transportan tus tokens y a verificar que están estructurados correctamente.

¿Qué es JWT? Una guía completa de los JSON Web Token - CoolTool