Introducción
Si alguna vez usaste una app web y seguiste logueado después de cerrar el navegador, probablemente JWT trabajó detrás de escena. JSON Web Tokens (JWT) es uno de los mecanismos de autenticación más usados en aplicaciones modernas, pero también uno de los más mal entendidos.
En este post te explico qué es JWT, cómo funciona por dentro, cuándo usarlo (y cuándo no), y casos prácticos que vas a reconocer inmediatamente.
¿Qué es JWT?
JWT (JSON Web Token) es un estándar abierto (RFC 7519) que define un formato compacto y autónomo para transmitir información de forma segura entre partes como un objeto JSON.
En simple: es un token con datos adentro que puede ser verificado porque viene firmado.
Ese string tiene 3 partes separadas por puntos:
1. Header — qué algoritmo de firma se usó
2. Payload — los datos (usuario, roles, expiración)
3. Signature — la firma que garantiza que nadie tocó el token
¿Cómo funciona?
1. El usuario hace login con credenciales
2. El servidor verifica y genera un JWT firmado
3. El cliente guarda el token
4. Cada request incluye el JWT en el header Authorization
5. El servidor verifica la firma y extrae los datos
Lo importante: El servidor no guarda el token. Es autocontenido.
Principios clave
1. JWT no está encriptado
El payload está codificado en Base64, no encriptado. No pongas datos sensibles dentro.
2. La firma garantiza integridad
No se puede modificar el payload sin invalidar la firma.
3. Tiene fecha de expiración
Todo JWT debe incluir exp. Después de esa fecha, es inválido.
4. Es stateless
El servidor no mantiene sesión. Cada request es independiente.
¿Cuándo usar JWT?
Usá JWT: APIs REST, microservicios, SPAs, autenticación entre servicios.
NO uses JWT: Cuando necesitás revocar sesiones inmediatamente, datos muy grandes, o apps tradicionales con server-side rendering.
Casos prácticos
Login en API REST
curl -X POST https://api.ejemplo.com/auth/login \
-d '{"email":"roberto@dev.com","password":"secret"}'
Respuesta:
{"token": "eyJhbG...NiJ9..."}
Usar el token:
curl https://api.ejemplo.com/api/profile \
-H "Authorization: Bearer eyJhbG..."
Microservicios
import jwt
from datetime import datetime, timedelta
token = jwt.encode(
{"service": "user-api", "exp": datetime.utcnow() + timedelta(hours=1)},
secret_key,
algorithm="HS256"
)
Autenticación en SPA
const { token } = await fetch('/api/auth/login', {
method: 'POST',
body: JSON.stringify({ email, password })
}).then(r => r.json())
localStorage.setItem('jwt', token)
Conclusión
JWT no es magia. Es una herramienta específica: autenticación stateless con tokens verificables.
Si entendés estos 4 principios, ya sabés cuándo usarlo:
1. No encriptado (solo firmado)
2. Tiene expiración
3. Es statel
robertomurillo.dev
GitHub
LinkedIn