JSON Web Token (JWT)
JWT (JSON Web Token) est un standard ouvert (RFC 7519) qui définit une manière compacte et autonome de transmettre en toute sécurité des informations entre parties sous forme d'objet JSON. Ces informations peuvent être vérifiées et fiables car elles sont signées numériquement. Les JWT peuvent être signés à l'aide d'un secret (avec l'algorithme HMAC) ou d'une paire de clés publique/privée utilisant RSA ou ECDSA.
Structure JWT
Un JWT se compose de trois parties séparées par des points (.), qui sont :
.yyyyy.zzzzz
-
:
Contient le type de token (JWT) et l'algorithme de signature (par exemple, HS256, RS256)
-
Charge utile :
Contient les revendications - déclarations sur une entité (généralement l'utilisateur) et données supplémentaires
-
Signature :
Utilisée pour vérifier que l'expéditeur du JWT est bien celui qu'il prétend être et pour s'assurer que le message n'a pas été modifié en cours de route
Algorithmes de signature
JWT prend en charge divers algorithmes de signature :
- HS256: HMAC avec SHA-256. Algorithme symétrique utilisant un secret partagé
- HS384: HMAC avec SHA-384. Algorithme symétrique avec hachage plus fort
- HS512: HMAC avec SHA-512. Algorithme symétrique avec hachage le plus fort
- RS256: Signature RSA avec SHA-256. Algorithme asymétrique utilisant une paire de clés publique/privée
- RS384: Signature RSA avec SHA-384. Algorithme asymétrique avec hachage plus fort
- RS512: Signature RSA avec SHA-512. Algorithme asymétrique avec hachage le plus fort
Revendications standard
JWT définit plusieurs revendications standard (noms de revendications enregistrés) qui fournissent des informations utiles :
- iss (Issuer): Émetteur du token
- sub (Subject): Sujet du token (ID utilisateur)
- aud (Audience): Public visé
- exp (Expiration Time): Heure d'expiration (horodatage Unix)
- nbf (Not Before): Pas valide avant cette heure
- iat (Issued At): Heure d'émission
- jti (JWT ID): Identifiant unique du token
Cas d'utilisation courants
- Authentification : Après la connexion de l'utilisateur, chaque requête ultérieure inclut le JWT, permettant l'accès aux routes, services et ressources
- Échange d'informations : Transmettre en toute sécurité des informations entre parties avec vérification de signature
- Authentification unique (SSO) : Largement utilisé pour les fonctionnalités SSO en raison du faible coût et de la capacité inter-domaines
- Autorisation API : Authentification sans état pour les API RESTful
- OAuth 2.0 et OpenID Connect : Composant central des protocoles d'authentification modernes
Note de sécurité:
Les tokens JWT sont signés pour vérifier l'authenticité mais ne sont pas chiffrés par défaut. Ne stockez pas d'informations sensibles dans la charge utile à moins qu'elles ne soient chiffrées séparément. Utilisez toujours HTTPS pour transmettre les tokens. Stockez les tokens en toute sécurité (par exemple, cookies httpOnly pour les applications Web). Implémentez des mécanismes appropriés d'expiration et de renouvellement des tokens. N'exposez jamais votre clé secrète dans le code côté client.