JWT – Json Web Token

Introduction

L’utilisation d’API tièrces au sein d’applications est devenue monnaie courante. Ceci est dû au fait que les applications ne peuvent plus compter sur leurs propres données. Pour qu’un projet puisse voir son potentiel décuplé, il doit pouvoir avoir des applications tierces, s’interopérer avec ces dernières et avoir facilement accès à ses données .

Pensez à la façon dont Facebook fournit une API pour récupérer ses données (à condition que vous soyez authentifié bien sûr). Facebook permet également aux applications tierces et autres services d’accéder à ses données. Tout cela est fait via une API.

Maintenant, quand nous parlons de construire nos propres API, il y aura toujours le sujet de la façon de sécuriser notre propre API.

Aujourd’hui, nous examinerons un standard: le JWT et comment les créer.

  • Qu’est ce que le JWT ?

Les jetons Web JSON (JWT), sont un standard puisque les informations qu’ils transportent sont transmises via JSON.Ils fonctionnent avec différents langages de programmation: les JWT fonctionnent en .NET, Python, Node.js, Java, PHP, Ruby, Go, JavaScript et Haskell. Ils peuvent donc être utilisés dans de nombreux scénarios différents.

Les JWT sont autonomes: ils portent toute l’information nécessaire en leur sein. Cela signifie qu’un JWT sera capable de transmettre des informations de base, une charge utile (généralement des informations utilisateur) et une signature.

Les JWT peuvent être transmis facilement: étant donné que les JWT sont autonomes, ils sont parfaitement utilisés dans un en-tête HTTP lors de l’authentification d’une API. Vous pouvez également le transmettre via l’URL.

  • A quoi ressemblent t-ils ?

Un JWT est facile à identifier. C’est trois chaînes de charactères séparées par un point.

Par exemple:

Décompressons les 3 parties et voyons ce que chacune contient.

  • Décomposition d’un token JWT

Comme il y a 3 parties séparées par un point, chaque section est créée différemment. Nous avons les 3 parties qui sont:

  1. L’entête
  2. La charge utile
  3. La Signature

L’en-tête porte 2 parties:

  1. Déclaration du type, qui est JWT
  2. L’algorithme de hachage à utiliser (HMAC SHA256 dans ce cas)

Voici un exemple:

Maintenant, une fois que c’est encodé en base64, nous avons la première partie de notre token JWT!

  • La charge utile

La charge utile portera la majeure partie de notre JWT, également appelée les revendications JWT (claims). C’est là que nous mettrons l’information que nous voulons transmettre et d’autres informations sur notre jeton.

Il y a plusieurs revendications que nous pouvons fournir. Cela inclut les noms de revendication enregistrés, les noms de revendications publiques et les noms de revendications privées.

  1. Réclamations enregistrées

    Les réclamations qui ne sont pas obligatoires et dont les noms nous sont réservés. Ceux-ci inclus:

    iss: L’émetteur du jeton
    sub: Le sujet du jeton
    aud: L’audience du jeton
    exp: Ce sera probablement la réclamation enregistrée le plus souvent utilisée. Cela définira l’expiration dans la valeur NumericDate. L’expiration DOIT être postérieure à la date / heure actuelle.
    nbf: Définit le délai avant lequel le JWT NE DOIT PAS être accepté pour le traitement
    iat: L’heure à laquelle le JWT a été émis. Peut être utilisé pour déterminer l’âge de la JWT
    jti: Identifiant unique pour le JWT. Peut être utilisé pour empêcher le JWT d’être rejoué. Ceci est utile pour un jeton d’utilisation unique.

  2. Réclamations publiques

    Ce sont les revendications que nous créons nous-mêmes comme nom d’utilisateur, informations et autres informations importantes.

  3. Réclamations privées

Un producteur et un consommateur peuvent accepter d’utiliser des noms de revendication privés. Ceux-ci sont sujets à collision, alors utilisez-les avec précaution.

  • Exemple de charge utile

Notre exemple de charge utile a deux revendications enregistrées (iss et exp) et deux revendications publiques (nom, admin).

Cela sera encodé comme ceci:

Ce sera la deuxième partie de notre token JWT.

  • La signature

La troisième et dernière partie de notre token JWT, sera la signature. Cette signature est composée d’un hachage des composants suivants:

  • Le header
  • La charge utile
  • Le secret

Voici comment nous obtenons la troisième partie de la JWT:

Le secret est la signature détenue par le serveur. C’est ainsi que notre serveur pourra vérifier les jetons existants et en signer de nouveaux.

Cela nous donne la dernière partie de notre JWT.

Maintenant, nous avons notre token JWT complet:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzY290Y2guaW8iLCJleHAiOjEzMDA4MTkzODAsIm5hbWUiOiJDaHJpcyBTZXZpbGxlamEiLCJhZG1pbiI6dHJ1ZX0.03f329983b86f7d9a9f5fef85305880101d5e302afafa20154d094b229f75773

Auth0 a créé un excellent site pour tester et comprendre comment les JWT sont fabriqués. Vous pouvez voir le contenu modifié à la volée, vous pouvez voir le JWT se mettre à jour immédiatement. Auth0 fournit d’excellents outils et gère également le package JWT Node pour gérer la création et la vérification des tokens JWT.

Conclusion

La norme JSON Web Token peut être utilisée dans plusieurs langues et est rapidement et facilement interchangeable.

Vous pouvez utiliser le jeton dans une URL, un paramètre POST ou un en-tête HTTP. La polyvalence de JSON Web Token nous permet d’authentifier une API rapidement et facilement en transmettant des informations via le jeton.

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.