Aller au contenu principal

Présentation du JWT (JSON Web Token)

Présentation du JWT (JSON Web Token)
Pédagogique
Technologies / Informatique
 

Qu'est-ce que le JWT ?

JSON Web Token (JWT) est une norme o (RFC 7519) qui définit un moyen compact et autonome pour transmettre en toute sécurité des informations entre les parties en tant qu'objet JSON. Ces informations peuvent être vérifiées et approuvées 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.

Bien que les JWT puissent être chiffrés pour assurer également le secret entre les parties, nous nous concentrerons sur les jetons signés. Les jetons signés peuvent vérifier l'intégrité des revendications qu'ils contiennent, tandis que les jetons chiffrés cachent ces revendications aux autres parties. Lorsque les jetons sont signés à l'aide de paires de clés publique/privée, la signature certifie également que seule la partie détenant la clé privée est celle qui l'a signée.

Quand utiliser le JWT ?

Voici quelques scénarios où le token JWT est utile :

  • Autorisation : il s'agit du scénario le plus courant pour l'utilisation de JWT. Une fois l'utilisateur connecté, chaque demande inclura le JWT, permettant à l'utilisateur d'accéder aux itinéraires, services et ressources autorisés avec ce jeton. L'authentification unique est une fonctionnalité qui utilise largement JWT de nos jours, en raison de sa faible surcharge et de sa capacité à être facilement utilisée dans différents domaines.
  • Échange d'informations : les tokens JWT sont un bon moyen de transmettre en toute sécurité des informations entre les parties. Étant donné que les jetons JWT peuvent être signés, par exemple à l'aide de paires de clés publique/privée, vous pouvez être sûr que les expéditeurs sont bien ceux qu'ils prétendent être. De plus, comme la signature est calculée à l'aide de l'en-tête et du payload, vous pouvez également vérifier que le contenu n'a pas été falsifié.


Quelle est la structure du token JWT ?

Dans sa forme compacte, les tokens JWT se composent de trois parties séparées par des points (.), qui sont :

  • Entête (Header)
  • Contenu (Payload)
  • Signature

 

Par conséquent, un JWT ressemble généralement à ce qui suit :

xxxxx.yyyyy.zzzzz

Ci-dessous la décomposition des différentes parties.

Entête (Header)

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

Par example:

 

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

Ensuite, ce JSON est encodé en Base64Url pour former la première partie du JWT.


Contenu (Payload)

La deuxième partie du jeton est le payload, qui contient les revendications (claims). Les revendications sont des déclarations sur une entité (utilisateur ...) et des données supplémentaires. Il existe trois types de réclamations : 

  • registered claims: Il s'agit d'un ensemble de revendications prédéfinies qui ne sont pas obligatoires mais recommandées, afin de fournir un ensemble de revendications utiles et interopérables. Certains d'entre eux sont : iss (émetteur), exp (délai d'expiration), sub (sujet), aud (audience) et autres.
  • public claims: Ceux-ci peuvent être définis à volonté par les utilisateurs du JWT. Mais pour éviter les collisions, ils doivent être définis dans le registre IANA de jetons JWT ou être définis comme un URI contenant un espace de noms résistant aux collisions.
  • private claims: Il s'agit des revendications personnalisées créées pour partager des informations entre les parties qui acceptent de les utiliser et ne sont ni des revendications enregistrées ni publiques.

 

Un exemple du Payload pourrait être :

 

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

 

Le payload est ensuite encodée en Base64Url pour former la deuxième partie du token JWT.


Signature

Pour créer la partie signature, vous devez prendre l'en-tête encodé, le payload encodé, un secret, l'algorithme spécifié dans l'en-tête et le signer.

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 est utilisée pour vérifier que le message n'a pas été modifié en cours de route et dans le cas de jetons signés avec une clé privée, elle peut également vérifier que l'expéditeur du JWT est celui qu'il prétend être.

Rassembler le tout

La sortie est constituée de trois chaînes d'URL 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.

Ce qui suit montre un JWT dont l'en-tête et le payload précédents sont encodés, et il est signé avec un secret.

 

JWT (JSON Web Token)

 

 

 

Si vous voulez expolrer le JWT et mettre ces concepts en pratique, vous pouvez utiliser jwt.io Debugger pour décoder, vérifier et générer des tokens JWT.

 

JSON Web Token