Qué es un JWT
Un JSON Web Token (JWT) es un estándar abierto (RFC 7519) para transmitir información entre partes como un objeto JSON firmado digitalmente. Muy utilizado para autenticación y autorización en APIs y aplicaciones web.
Estructura de un JWT
- Header: tipo de token y algoritmo de firma (HS256, RS256…)
- Payload: datos JSON sobre el usuario y la sesión (sub, exp, iat, roles…)
- Signature: hash criptográfico del header + payload, firmado con un secreto o clave privada
Importante: el payload solo está codificado en Base64, no cifrado. Nunca almacenes contraseñas o datos sensibles en el payload.
Algoritmos de firma
- HS256: simétrico — mismo secreto para firmar y verificar
- RS256: asimétrico — clave privada firma, clave pública verifica
- ES256: asimétrico con curvas elípticas — claves más cortas, preferido en sistemas modernos
Buenas prácticas de seguridad
- exp corto (15 min) para access tokens
- Refresh tokens separados con rotación
- Cookies HttpOnly + Secure + SameSite=Strict para prevenir XSS
- Lista de revocación (JTI deny-list) o rotación de clave