Connexion

Démarrer avec les jetons JSON Web Token

Tout ce que vous vouliez savoir sur les jetons JSON Web Token sans oser le demander.

json-web-tokens

Qu'est-ce qu'un jeton JSON Web Token ?

JSON Web Token (JWT) est une norme ouverte (RFC 7519) qui définit une méthode compacte et autonome pour les transmissions sécurisées entre tiers d'informations encodées sous forme d'objet JSON. La signature numérique de ces informations vérifiables garantit leur fiabilité. Les jetons JWT peuvent être signés avec un code secret (basé sur un algorithme HMAC) ou une double clé publique/ privée RSA.

Voyons quelques concepts liés à leur définition.

  • Compact : Grâce à sa petite taille, ce jeton peut être transmis par une URL, un paramètre POST ou un en-tête HTTP. De plus, toujours à cause de sa taille, sa transmission est rapide.
  • Autonome : La charge utile contient toutes les informations requises sur l'utilisateur, afin d'éviter d'interroger la base de données plusieurs fois.
Vous souhaitez vous familiariser avec les JWT le plus rapidement possible ? TÉLÉCHARGEZ NOTRE E-BOOK GRATUIT

Manuel iPad Pro

Quand utiliser des jetons JSON Web Token ?

Voici quelques scénarios où les jetons JSON Web Token sont utiles :

  • Authentification : Ce scénario est typique de l'utilisation des JWT. Une fois l'utilisateur connecté, chaque demande ultérieure inclura le JWT. L'utilisateur pourra accéder aux routes, services et ressources autorisés par ce jeton. L'authentification unique est une fonction qui utilise largement JWT, en raison de sa faible charge utile et de sa capacité d'utilisation facile par divers systèmes dans différents domaines.
  • Échanges d'informations : Les JWT constituent un excellent moyen de transmission des informations en toute sécurité entre des parties. Comme chaque jeton peut être signé, par exemple à l'aide d'une paire de clés publique/privée, l'authenticité de l'expéditeur est indiscutable. De plus, comme la signature est calculée avec l'en-tête et la charge utile, vous pouvez aussi vérifier que le contenu n'a pas été modifié.

Quelle est la structure des jetons JSON Web Token ?

Les JWT se composent de trois parties séparées par des points (.) :

  • En-tête
  • Charge utile
  • Signature

Par conséquent, un JWT typique ressemble à ceci.

xxxxx.yyyyy.zzzzz

Examinons ces différents composants.

L'en-tête se compose généralement de deux parties : le type de jeton, qui est JWT, et l'algorithme de hachage, tel que HMAC SHA256 ou RSA.

Par exemple :

{
  'alg': 'HS256',
  'typ': 'JWT'
}

Cette syntaxe JSON est codée en Base64Url pour former la première partie du jeton JWT.

Charge utile

La deuxième partie du jeton est la charge utile, qui contient les revendications. Les revendications dépendent d'une entité (généralement, l'utilisateur), avec des métadonnées supplémentaires. Trois types de revendications sont disponibles : réservées, publiques et privées.

    • Les revendications réservées : Ce type regroupe des revendications prédéfinies, qui ne sont pas obligatoires, mais recommandées, conçues pour fournir un ensemble de revendications utiles et interopérables. Elles peuvent inclure : iss (issuer ou émetteur), exp (délai d'expiration), sub (sujet), aud (audience), entre autres.

Remarquez que les noms des revendications ne comportent que trois caractères, car un jeton JWT doit être compact.

  • Les revendications publiques : Ce type peut être défini à volonté par les utilisateurs de jetons JWT. Mais pour éviter les collisions, ils doivent être définis dans le registre IANA JSON Web Token ou être définis comme une URI qui contient un espace de nom résistant aux collisions.
  • Les revendications privées : Ce type réunit des revendications personnalisées, qui servent à partager des informations entre les parties qui ont convenus entre elles de les utiliser.

Voici un exemple de charge utile :

{
  'sub': '1234567890',
  'name': 'John Doe',
  'admin': true
}

La charge utile est ensuite codée en Base64Url pour former la deuxième partie du JWT.

Signature

Pour créer la partie signature, vous devez réunir l'en-tête codé, la charge utile codée, un code secret, l'algorithme spécifié dans l'en-tête, et signer le tout.

Par exemple, si vous souhaitez utiliser l'algorithme HMAC SHA256, la signature sera créée de la manière suivante.

HMACSHA256(
  base64UrlEncode(header) + '.' +
  base64UrlEncode(payload),
  secret)

La signature sert à vérifier que l'expéditeur du JWT est bien celui qu'il prétend être et à s'assurer que le message n'a pas été modifié en cours de route.

Tout combiner

Le résultat combine trois chaînes Base64 séparées par des points qui peuvent être facilement transmises dans les environnements HTML et HTTP, tout en étant plus compactes par rapport aux normes basées sur XML telles que SAML.

L'image suivante montre un JWT dont l'en-tête précédent et la charge utile sont codés. Il est signé avec un code secret.

Un jeton JWT codé

Allez sur le site jwt.io où vous pourrez interagir avec un JWT et mettre ces concepts en pratique. jwt.io vous permet de décoder, de vérifier et de générer des jetons JWT.

Comment fonctionnent les jetons JSON Web Token ?

Dans le cadre de l'authentification, lorsque l'utilisateur se connecte avec succès avec ses informations d'identification, un jeton JSON Web Token est renvoyé. Comme les jetons sont des justificatifs d'identité, toutes les précautions doivent être prises pour éviter les problèmes de sécurité. En général, aucun jeton ne doit être conservé plus longtemps que nécessaire.

Pour des raisons de sécurité, les données de session sensibles ne doivent pas non plus être conservées dans l'espace de stockage du navigateur.

Chaque fois qu'un utilisateur veut accéder à une route protégée, il doit envoyer le JWT, généralement dans l'en-tête Autorisation en utilisant le schéma Bearer. Le contenu de l'en-tête doit donc ressembler à ce qui suit.

Autorisation : Bearer <token>

Ce mécanisme d'authentification est sans état, car l'état de l'utilisateur n'est jamais enregistré dans la mémoire du serveur. Les routes protégées du serveur vérifieront la présence d'un JWT valide dans l'en-tête Autorisation et, si c'est le cas, l'utilisateur sera autorisé. Comme les JWT sont autonomes, ils contiennent toutes les informations nécessaires. Ce qui réduit la nécessité de faire des allers-retours dans la base de données.

Il est également possible de s'appuyer pleinement sur les API de données sans état et même de faire des demandes aux services en aval. Les domaines qui servent vos API n'ont pas d'importance. En effet, il n'y a aucun risque de problème Cross-Origin Resource Sharing (CORS) puisque le mécanisme n'utilise aucun cookie.
Fonctionnement des jetons JSON Web Token

Pourquoi utiliser des jetons JSON Web Token ?

Parlons des avantages des jetons JSON Web Token (JWT) en les comparant aux jetons Simple Web Tokens (SWT) et au protocole Security Assertion Markup Language (SAML).

Comme JSON est plus léger que XML, lorsqu'il est codé, sa taille est également plus petite. Un JWT est donc plus compact que SAML. Cela fait de JWT un bon choix pour être transmis dans les environnements HTML et HTTP.

Du point de vue de la sécurité, un SWT ne peut être signé symétriquement que par un code secret partagé et incluant l'algorithme HMAC. Les jetons JWT et SAML peuvent également utiliser une paire de clés publiques/privées, avec une signature sous forme de certificat X.509. Toutefois, il est très difficile de signer du XML avec une signature numérique XML sans introduire d'obscures failles de sécurité, alors que la signature JSON est très simple.

Les analyseurs JSON sont courants dans la plupart des langages de programmation, parce qu'ils correspondent directement à des objets, alors que le XML n'a pas de correspondance naturelle entre document et objet. Il est donc plus facile de travailler avec JWT qu'avec les déclarations SAML.

En ce qui concerne l'utilisation, JWT fonctionne à l'échelle de l'Internet. Cela met en évidence la facilité du traitement côté client des jetons JWT sur de multiples plateformes, notamment mobiles.
Exemple : jeton JSON Web Token

Comment utiliser les jetons JSON Web Token dans Auth0 ?

Auth0 émet des jetons JWT à la suite du processus d'authentification. Lorsque l'utilisateur se connecte en utilisant Auth0, un jeton JWT est créé, signé et envoyé à l'utilisateur. Auth0 prend en charge la signature du jeton JWT avec les algorithmes HMAC et RSA. Ce jeton sera ensuite utilisé pour effectuer l'authentification et l'autorisation sur des API qui donneront accès à leurs routes et ressources protégées.

Nous utilisons également les jetons JWT pour effectuer l'authentification et l'autorisation dans l'API v2 d'Auth0, remplaçant ainsi l'utilisation traditionnelle des clés API opaques ordinaires. En ce qui concerne l'autorisation, les jetons JSON Web Token apportent une sécurité granulaire. Elle permet de spécifier un ensemble particulier d'autorisations dans le jeton, ce qui améliore le débogage.

Inscription gratuite

Commencez à construire et à sécuriser vos applis dès aujourd'hui avec la plateforme d'identité Auth0.

3D login box