Jetons Web JSON
Le jeton Web JSON (JWT), prononcé « jot », est une norme ouverte (RFC 7519) qui définit un moyen compact et autonome de transmettre des informations en toute sécurité entre les parties en tant qu’objet JSON. JWT est une norme, ce qui implique que tous les JWT sont des jetons. Cependant, tous les jetons ne sont pas nécessairement des JWT.
En raison de sa taille relativement petite, un JWT peut être envoyé par une URL, par l’intermédiaire d’un paramètre POST, ou encore dans une en-tête HTTP. Il est transmis rapidement. Un JWT contient toutes les informations requises sur une entité pour éviter de consulter une base de données plus d’une fois. Le destinataire d’un JWT n’a pas non plus besoin d’appeler un serveur pour valider le jeton.
Avantages des JWT
Il y a des avantages à utiliser les JWT par rapport aux simples jetons Web (SWT) et aux jetons SAML.
Plus compact : JSON est moins détaillé que XML. De ce fait, lorsqu’il est encodé, un jeton JWT est plus petit qu’un jeton SAML. JWT est un bon choix pour être transmis dans les environnements HTML et HTTP.

Plus sécurisé : Les JWT peuvent utiliser une paire de clés publique/privée sous la forme d’un certificat X.509 pour la signature. Un JWT peut également être signé symétriquement par un secret partagé à l’aide de l’algorithme HMAC. Bien que les jetons SAML puissent s’appuyer sur des combinaisons de clés publiques et privées, tout comme les JWT, il est extrêmement ardu de signer des documents XML avec une signature numérique XML, sans compromettre la sécurité, comparativement à la facilité de signature de JSON. En savoir plus sur les algorithmes de signature JWT.
Plus commun : Les parseurs JSON sont courants dans la plupart des langages de programmation car ils mappent directement sur des objets. XML, par contre, n’a pas de mappage document-objet naturel. Cela rend le travail avec JWT plus facile que celui avec les assertions SAML.
Plus facile à traiter : JWT est utilisé à l’échelle mondiale d’Internet. Cela signifie qu’il est plus facile à traiter sur les appareils des utilisateurs, notamment les téléphones mobiles.
Utiliser les JWT
Les JWT peuvent être utilisés de différentes façons :
Authentication (Authentification) : Lorsqu’un utilisateur se connecte avec succès en utilisant ses identifiants, un jeton d’ID est retourné. Conformément aux normes OpenID Connect (OIDC), un jeton d’ID est toujours un JWT.
Autorisation : Une fois qu’un utilisateur a réussi sa connexion, une application peut demander l’accès à des routes, des services ou des ressources (p. ex., des API) en son nom. Pour ce faire, il faut que, pour chaque demande, un jeton d’accès soit passé. Ce jeton peut prendre la forme d’un JWT. L’authentification unique (SSO) utilise largement JWT en raison de la faible surcharge du format et de sa facilité d’utilisation dans différents domaines.
Échange d’information : Les JWT constituent un moyen efficace de communiquer des données de manière sécurisée entre les entités, car ils peuvent être signés, ce qui garantit l’identité de l’expéditeur. De plus, la structure d’un JWT vous permet de vérifier que le contenu n’a pas été altéré.
Sécurité des JWT
Les informations contenues dans l’objet JSON peuvent être vérifiées et approuvées car elles sont signées numériquement. Les JWT peuvent être chiffrés pour garantir la confidentialité entre les entités. Cependant, les JWT émis par Auth0 sont des signatures Web JSON (JWS), ce qui implique qu’ils sont plutôt signés que cryptés. Par conséquent, nous allons nous concentrer sur les jetons signés, qui peuvent attester de l’intégrité des demandes qu’ils contiennent, tandis que les jetons cryptés cachent ces demandes des autres parties.
En général, 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 (bien qu’Auth0 ne supporte que HMAC et RSA). Lorsque les jetons sont signés à l’aide de paires de clés publiques/privées, la signature confirme également que seule la partie qui possède la clé privée est celle qui l’a signée.
Avant d’utiliser un JWT reçu, il faut le valider correctement à l’aide de sa signature. Notez qu’un jeton validé avec succès signifie seulement que les informations contenues dans le jeton n’ont pas été modifiées par quelqu’un d’autre. Cela ne signifie pas que les autres n’ont pas pu voir le contenu, qui est stocké en texte brut. Par conséquent, il est crucial de ne jamais stocker des données confidentielles dans un JWT. Il est également recommandé de prendre des mesures supplémentaires pour éviter que les JWT ne soient interceptés, telles que l’envoi de JWT uniquement sur HTTPS, le respect des meilleures pratiques et l’utilisation exclusive de bibliothèques sécurisées et à jour.