JSON Web Token

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche

JSON Web Token (JWT) est un standard ouvert défini dans la RFC 7519[1]. Il permet l'échange sécurisé de jetons (tokens) entre plusieurs parties. Cette sécurité de l’échange se traduit par la vérification de l’intégrité des données à l’aide d’une signature numérique. Elle s’effectue par l'algorithme HMAC ou RSA.

Structure[modifier | modifier le code]

Un jeton se compose de trois parties:

  • Une en-tête (header), utilisée pour décrire le jeton. Il s'agit d'un objet JSON.
  • Une charge utile (payload) qui représente les informations embarquées dans le jeton. Il s'agit également d'un objet JSON.
  • Une signature numérique.

Exemple[modifier | modifier le code]

En-tête

{"typ": "jwt", "alg": "HS512"}

Charge utile

{"name":"Wikipedia","iat":1525777938}

Dans l'exemple ci-dessus, on voit dans l’en-tête que le jeton est un JSON Web Token (jwt) et que l'algorithme utilisé pour la signature est HMAC-SHA512.

Obtention de la signature[modifier | modifier le code]

Pour obtenir la signature, il faut tout d'abord encoder séparément l'en-tête et la charge utile avec Base64url défini dans la RFC 4648[2]. Ensuite, on les concatène ensemble en les séparant avec un point. On obtient la signature de ce résultat avec l'algorithme choisi. Cette signature est ajoutée au résultat de la même manière (encodée et séparée par un point).

À noter que pour l'encodage en Base64url, le caractère de remplissage '=' n'est pas obligatoire[3] et ne sera pas utilisé dans la création du JSON Web Token pour faciliter la transmission dans une URL.

Procédure étape par étape[modifier | modifier le code]

À partir de l'exemple ci-dessus, voici les différentes étapes pour obtenir un JSON Web Token.

Encodage de l'en-tête

eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9

Encodage de la charge utile

eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ

Concaténation des deux éléments, séparation par un point

eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9.eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ

Obtention de la signature avec l'algorithme HMAC-SHA512[4].

HMACSHA512(concatenation, 'ma super clé secrète')

Encodage de la signature (toujours avec Base64url)

iu0aMCsaepPy6ULphSX5PT32oPvKkM5dPl131knIDq9Cr8OUzzACsuBnpSJ_rE9XkGjmQVawcvyCHLiM4Kr6NA

Concaténation des deux éléments, séparation par un point

eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzUxMiJ9.eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ.iu0aMCsaepPy6ULphSX5PT32oPvKkM5dPl131knIDq9Cr8OUzzACsuBnpSJ_rE9XkGjmQVawcvyCHLiM4Kr6NA

Notes et références[modifier | modifier le code]

  1. (en) Bradley, John et Sakimura, Nat, « JSON Web Token (JWT) », sur tools.ietf.org (consulté le 8 mai 2018)
  2. (en) Simon Josefsson <simon@josefsson.org>, « The Base16, Base32, and Base64 Data Encodings », sur tools.ietf.org (consulté le 8 mai 2018)
  3. (en) Simon Josefsson <simon@josefsson.org>, « The Base16, Base32, and Base64 Data Encodings », sur tools.ietf.org (consulté le 8 mai 2018)
  4. (en-US) auth0.com, « JWT.IO - JSON Web Tokens Introduction », sur jwt.io (consulté le 8 mai 2018)