JSON Web Token (JWT) : Le guide complet

PrimFX Boris ('PrimFX') Le 19 juin 2020

Introduction

JSON Web Token (JWT) est un Open Standard (RFC 7519) depuis 2015 qui permet l’échange sécurisé de jetons. Si vous avez l’habitude de concevoir ou de travailler sur des applications web ou mobiles, des logiciels, etc. vous avez certainement déjà entendu parler de ces tokens.

Le but de cet article est de démystifier ces fameux JWT, de vous donner un aperçu concret de ce à quoi ils servent et comment ils fonctionnent. Je vous montrerai également comment ils doivent et ne doivent pas être utilisés, tout en répondant à certaines questions fréquemment posées lorsque l’on débute avec les JWT (entre autre sur le plan de la sécurité).

 

JWT est un Token, qui se traduit en français par « Jeton ». Les termes JWT, token, jeton, JWT token ou encore jeton JWT seront donc des synonymes dans le cadre de ce guide complet sur les JWT. Notez au passage que JWT se prononce djotte.

Après avoir lu ce guide, vous serez capable d’appréhender correctement le fonctionnement des JWT et vous serez en mesure de les intégrer plus facilement dans vos applications, toutes technologies confondues.

Les JWT, à quoi ça sert ?

L’utilisation de JWT Tokens est un moyen de plus en plus populaire d’authentification (et parfois d’autorisation) d’un client auprès d’un serveur.

 

Lorsque je parlerai de « client » dans cet article, il s’agit de clients au sens de l’architecture client/serveur. Il pourra donc s’agir d’un client web (navigateur), mobile (application), logiciel, etc.

Comparaison avec une authentification par session

L’authentification par session est un moyen communément utilisé pour gérer des “sessions d’utilisateurs”, c’est pourquoi je vous propose un rapprochement entre session et JWT. Si vous le souhaitez, vous pouvez également passer cette section et vous rendre directement à la suivante.

Si vous êtes habitué à des technologies comme PHP (et ses frameworks), Ruby on Rails, etc. vous êtes certainement à l’aise avec l’authentification par session. Pour résumer, le principe de la gestion d’une authentification par session est la suivante :

  1. L’utilisateur se connecte à votre site (par exemple avec un couple email/mot de passe)
  2. Si les informations de connexion sont correctes, le serveur enregistre les informations sur l’utilisateur connecté dans une variable de session (qui est, formellement, un cookie un peu particulier)
  3. Tout au long de la navigation de l’utilisateur, votre serveur saura le reconnaître grâce à ces informations de session

Dans ce type d’architectures client/serveur, puisque le serveur génère directement le code qui sera transmis au client, il n’y a aucune nécessité d’utiliser un jeton d’authentification : la session sait très bien gérer tout cela.

Néanmoins, dans certaines architectures un poil plus complexe, la gestion de l’authentification par session est impossible ! Prenons l’exemple d’une application mobile qui doit communiquer avec un serveur distant à travers une API.

 

Puisqu’une application mobile ne peut pas embarquer de serveur (peu importe qu’elle soit créée en Java, Swift, Kotlin, React Native, Flutter ou tout autre langage/framework), elle devra forcément communiquer avec un serveur par un autre moyen, par exemple une API.

Si cette application doit gérer la connexion d’utilisateurs à leur espace membre, elle ne pourra pas utiliser de mécanisme d’authentification par session. En effet, il n’existe aucun « lien permanent » entre le client (application mobile) et le serveur. C’est ici qu’interviennent les JWT ! En effet, les JWT constituent une alternative d’authentification basée sur des jetons (en anglais, Token-Based Authentication) au lieu de l’authentification basée sur les sessions.

On dit également que les JWT sont un moyen d'authentification stateless. En effet, tandis qu'une authentification stateful requiert que le serveur connaisse les informations de connexion (i.e. de l'utilisateur connecté), une authentification stateless permet l'échange des informations de connexion via un jeton communiqué entre le client et le serveur (comme c'est le cas avec les JWT).


A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 22 ans et je suis passionné d'informatique. Suite à mes études (Licence Informatique puis MSc Computer Science au Trinity College Dublin), je gère l'entreprise Single Quote co-fondée en 2019 et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles 😃