¿Qué es un JSON Web Token (JWT)? La Guía Definitiva
¿Qué es un JSON Web Token (JWT)? La Guía Definitiva
Si trabajas en desarrollo web, especialmente con APIs, es casi seguro que te has topado con el término JWT o JSON Web Token. Pero, ¿qué son exactamente y por qué se han vuelto tan populares para asegurar las aplicaciones?
En este artículo, vamos a desglosar todo lo que necesitas saber sobre los JWTs de una manera sencilla y fácil de entender.
La Analogía Perfecta: El Carné de la Empresa vs. Preguntar al Recepcionista
Para entender por qué los JWTs son tan útiles, comparémoslos con el método tradicional de sesiones basadas en servidor.
Sesiones (Preguntar al Recepcionista): Imagina que trabajas en una oficina. Cada vez que quieres entrar a un área restringida, tienes que ir a la recepción, mostrar tu cara y pedirle al recepcionista que verifique en su sistema si tienes permiso. El recepcionista tiene que buscarte y confirmar tu identidad cada vez. Esto es como una sesión: el servidor (el recepcionista) tiene que mantener un registro de quién eres y verificarlo en cada petición, lo que consume memoria y recursos.
JWT (El Carné de la Empresa): Ahora, imagina que la empresa te da un carné de identificación con tu foto, tu nombre, tu cargo y a qué áreas tienes acceso. El carné tiene un sello o un holograma oficial que demuestra que es auténtico. Ahora, cuando quieres entrar a un área, solo tienes que mostrar tu carné al guardia de seguridad. Él no necesita saber quién eres, solo tiene que verificar que el carné es válido y que te da permiso para entrar.
Un JWT es exactamente como ese carné de la empresa. Es una credencial digital que el servidor le da al usuario después de que inicia sesión. El usuario envía este «carné» con cada petición para demostrar quién es y qué permisos tiene.
¿Qué es un JSON Web Token (JWT)?
Un 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 dos partes como un objeto JSON.
La palabra clave aquí es autónoma. Toda la información necesaria para verificar al usuario está dentro del propio token. El servidor no necesita guardar un registro de los tokens emitidos. Solo necesita verificar que la firma del token sea válida.
La Estructura de un JWT
Un JWT no es más que una larga cadena de texto, pero se compone de tres partes separadas por puntos (.
):
xxxxx.yyyyy.zzzzz
Header.Payload.Signature
Vamos a analizar cada parte.
1. Header (Encabezado)
El encabezado consiste típicamente en dos partes:
typ
: El tipo de token, que esJWT
.alg
: El algoritmo de firma utilizado, comoHS256
(HMAC con SHA-256) oRS256
.
Este objeto JSON se codifica en Base64Url para formar la primera parte del JWT.
Ejemplo de Header:
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload (Carga Útil)
El payload contiene las «claims» o declaraciones. Las claims son declaraciones sobre una entidad (normalmente, el usuario) y datos adicionales. Hay tres tipos de claims:
Registered claims (Declaraciones registradas): Son un conjunto de declaraciones predefinidas que no son obligatorias pero sí recomendadas, como
iss
(emisor),exp
(tiempo de expiración),sub
(asunto),aud
(audiencia).Public claims (Declaraciones públicas): Pueden ser definidas a voluntad por quienes usan los JWTs. Pero para evitar colisiones, deben ser definidas en el Registro de IANA JSON Web Token o ser nombradas usando una URI que contenga un espacio de nombres resistente a las colisiones.
Private claims (Declaraciones privadas): Son las declaraciones personalizadas creadas para compartir información entre las partes que acuerdan usarlas.
Importante: La información en el payload está codificada, no encriptada. Cualquiera puede decodificarla y leerla. Por lo tanto, nunca debes poner información sensible (como contraseñas) en el payload.
Ejemplo de Payload:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022
}
3. Signature (Firma)
La firma se utiliza para verificar que el mensaje no fue alterado en el camino y, en el caso de algoritmos simétricos, para verificar quién es el emisor del JWT.
Para crear la firma, se toman:
El encabezado codificado en Base64Url.
El payload codificado en Base64Url.
Un secreto (una clave privada que solo el servidor conoce).
Todo esto se pasa por el algoritmo de firma especificado en el encabezado (por ejemplo, HS256
).
Ejemplo de creación de firma:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
El resultado es una cadena única que forma la tercera y última parte del JWT.

¿Cómo Funcionan los JWTs?
El flujo es bastante simple:
El usuario inicia sesión con su usuario y contraseña.
El servidor verifica las credenciales. Si son correctas, crea un JWT y se lo envía al usuario.
El usuario almacena este JWT en el cliente (normalmente en
localStorage
osessionStorage
).Para cada petición subsiguiente a una ruta protegida, el usuario envía el JWT en la cabecera
Authorization
usando el esquemaBearer
.Authorization: Bearer <token>
El servidor recibe la petición, extrae el token y verifica la firma. Si la firma es válida, confía en la información del payload y procesa la petición.
Conclusión
Los JSON Web Tokens ofrecen una forma eficiente y sin estado para manejar la autenticación en aplicaciones modernas, especialmente en arquitecturas de microservicios o aplicaciones de una sola página (SPAs). Al entender su estructura y su flujo, puedes implementarlos de manera segura y efectiva en tus propios proyectos.
Link de referencia: What Are JSON Web Tokens (JWT)?