JSON Web Token (JWT)
JWT (JSON Web Token) es un estándar abierto (RFC 7519) que define una forma compacta y autocontenida para transmitir de forma segura información entre partes como un objeto JSON. Esta información puede ser verificada y confiable porque está firmada digitalmente. Los JWT pueden firmarse usando un secreto (con el algoritmo HMAC) o un par de claves pública/privada usando RSA o ECDSA.
Estructura JWT
Un JWT consta de tres partes separadas por puntos (.), que son:
.yyyyy.zzzzz
-
:
Contiene el tipo de token (JWT) y el algoritmo de firma (por ejemplo, HS256, RS256)
-
Carga útil :
Contiene las reclamaciones - declaraciones sobre una entidad (típicamente el usuario) y datos adicionales
-
Firma :
Se utiliza para verificar que el remitente del JWT es quien dice ser y para asegurar que el mensaje no se modificó en el camino
Algoritmos de firma
JWT soporta varios algoritmos de firma:
- HS256: HMAC con SHA-256. Algoritmo simétrico usando un secreto compartido
- HS384: HMAC con SHA-384. Algoritmo simétrico con hash más fuerte
- HS512: HMAC con SHA-512. Algoritmo simétrico con hash más fuerte
- RS256: Firma RSA con SHA-256. Algoritmo asimétrico usando par de claves pública/privada
- RS384: Firma RSA con SHA-384. Algoritmo asimétrico con hash más fuerte
- RS512: Firma RSA con SHA-512. Algoritmo asimétrico con hash más fuerte
Reclamaciones estándar
JWT define varias reclamaciones estándar (nombres de reclamaciones registrados) que proporcionan información útil:
- iss (Issuer): Emisor del token
- sub (Subject): Sujeto del token (ID de usuario)
- aud (Audience): Audiencia prevista
- exp (Expiration Time): Tiempo de expiración (marca de tiempo Unix)
- nbf (Not Before): No válido antes de este tiempo
- iat (Issued At): Tiempo de emisión
- jti (JWT ID): Identificador único del token
Casos de uso comunes
- Autenticación: Después del inicio de sesión del usuario, cada solicitud subsiguiente incluye el JWT, permitiendo el acceso a rutas, servicios y recursos
- Intercambio de información: Transmitir de forma segura información entre partes con verificación de firma
- Inicio de sesión único (SSO): Ampliamente utilizado para funciones de SSO debido a la baja sobrecarga y capacidad entre dominios
- Autorización API: Autenticación sin estado para APIs RESTful
- OAuth 2.0 y OpenID Connect: Componente central de los protocolos de autenticación modernos
Nota de seguridad:
Los tokens JWT están firmados para verificar la autenticidad pero no están cifrados por defecto. No almacene información sensible en la carga útil a menos que esté cifrada por separado. Use siempre HTTPS para transmitir tokens. Almacene tokens de forma segura (por ejemplo, cookies httpOnly para aplicaciones web). Implemente mecanismos apropiados de expiración y renovación de tokens. Nunca exponga su clave secreta en código del lado del cliente.