Qu'est-ce que l'authentification par jeton ?

L'authentification par jeton est un moyen de confirmer l'identité d'un utilisateur ou d'un appareil. Elle repose sur la vérification de la possession par l'entité en question d'un jeton préalablement émis.

Objectifs d’apprentissage

Cet article s'articule autour des points suivants :

  • Définir l'authentification par jeton
  • Décrire les deux types d'authentification par jeton
  • Comparez l'authentification par jeton avec l'authentification par cookie pour les applications web

Copier le lien de l'article

Qu'est-ce que l'authentification par jeton ?

L'authentification par jeton est le processus qui consiste à vérifier l'identité en contrôlant un jeton. Dans la gestion des accès, les serveurs utilisent l'authentification par jeton pour vérifier l'identité d'un utilisateur, d'une API, d'un ordinateur ou d'un autre serveur.

Un jeton est un objet symbolique émis par une source de confiance - pensez aux agents des forces de l'ordre qui portent un badge émis par leur agence qui légitime leur autorité. Les jetons peuvent être physiques (comme une clé USB) ou numériques (un message généré par ordinateur ou une signature numérique).

L'authentification par jeton peut faire référence à deux processus différents :

  1. Vérification de l'identité via un jeton physique. Il s'agit d'un facteur d'authentification largement utilisé pour se connecter : les utilisateurs sont invités à présenter leur jeton lorsqu'ils se connectent à un compte ou à un appareil. (Les facteurs d'authentification sont décrits plus en détail dans Qu'est-ce que l'authentification ?)
  2. Reconfirmer l'identité via un jeton web. Les jetons Web sont purement numériques. Un jeton web est généré par un serveur et envoyé à un client. Le jeton est joint à chaque demande du client afin que le serveur connaisse l'identité du client et sache à quelles données le client peut accéder. Ce type d'authentification basée sur un jeton diffère de l'authentification basée sur un cookie, qui est un moyen similaire d'accomplir la même chose - en savoir plus ci-dessous.

How does authentication with a physical token work ?

L'authentification par jeton physique a généralement lieu pendant le processus de connexion de l'utilisateur. L'utilisateur doit prouver qu'il possède un objet que personne d'autre ne possède. Il peut le prouver en saisissant un code affiché par l'objet, en connectant l'objet à un dispositif par USB, en connectant l'objet par Bluetooth, ou plusieurs autres méthodes. De la même manière que la saisie d'un mot de passe prouve que l'utilisateur possède un élément de connaissance que personne d'autre ne possède, l'utilisation d'un jeton prouve qu'un utilisateur possède un élément que seul cet utilisateur possède.

Il existe deux types de jetons utilisés pour ce type d'authentification : les jetons souples et les jetons rigides.

  • Les jetons logiciels impliquent la saisie d'un code secret ou d'un message envoyé à un appareil pour prouver la possession de l'appareil. Cela prend souvent la forme d'un code envoyé à un smartphone par message texte.
  • Jetons durs sont des éléments matériels que l'utilisateur connecte directement à un ordinateur ou à un appareil mobile pour se connecter.

Comment fonctionne l'authentification par jeton web ?

Un jeton web est numérique, ce n'est pas un objet physique. Il s'agit d'un message envoyé par un serveur à un client et stocké temporairement par ce dernier. Le client inclut une copie du jeton dans les demandes ultérieures envoyées au serveur pour confirmer l'état d'authentification du client.

Alors que l'authentification par jeton physique vérifie l'identité pendant le processus de connexion, les jetons Web sont émis à la suite d'une connexion réussie. Ils maintiennent la session de connexion active.

Cependant, l'utilisation de jetons web pour les sessions utilisateur n'est pas toujours idéale. De nombreux développeurs sont partisans de l'utilisation de cookies à la place. Les jetons Web peuvent être mieux utilisés pour l'authentification des points de terminaison des API ou pour valider une connexion entre serveurs, plutôt qu'entre serveur et client.

Qu'est-ce qu'un jeton Web JSON (JWT) ?

Dans le développement web, « web tokens » fait presque toujours référence aux jetons web JSON. Le jeton Web JSON (JWT) est une norme permettant de créer des jetons Web signés numériquement qui contiennent des données en notation d'objets JavaScript (JSON). Un serveur crée un jeton qui prouve l'identité du client et l'envoie à ce dernier. JWT utilise des signatures numériques pour prouver que le jeton est légitime.

Les JWT comprennent trois composants :

  • Header : l'en-tête fournit des informations sur le JWT - quel type de jeton est le JWT et quelle méthode a été utilisée pour le signer numériquement.
  • Charge utile : toute donnée JSON peut être placée ici. Les données utiles JWT pour l'authentification contiennent des déclarations sur l'identité de l'utilisateur. Ils peuvent également inclure des informations sur les autorisations de l'utilisateur, du serveur ou du point de terminaison de l'API.
  • Signature numérique : la signature utilise la cryptographie pour signer l'en-tête et la charge utile avec une clé afin de garantir que les données qu'ils contiennent sont légitimes. Imaginez la signature numérique comme un sceau inviolable sur une boîte de médicaments.

Authentification par jeton (JWT) et authentification par cookie

Les JWT sont parfois utilisés pour maintenir l'authentification des utilisateurs une fois qu'ils se sont connectés à une application web. Toutefois, les cookies peuvent également être utilisés à cette fin.

Un cookie est un petit fichier de données qu'un serveur envoie à un client. Lorsqu'un utilisateur se connecte à une application web, le serveur génère un cookie et l'envoie au périphérique client (généralement l'ordinateur ou le smartphone de l'utilisateur). Le dispositif client stocke le cookie dans le cache du navigateur et inclut une copie du cookie dans les futures demandes adressées au serveur, de la même manière que les JWT peuvent être utilisés. Une fois que l'utilisateur se déconnecte, le navigateur supprime le cookie.

Les cookies ont une taille de fichier beaucoup plus petite que les JWT, parce que les JWT comprennent des en-têtes et des signatures numériques en plus de la charge utile. En revanche, le cookie ne contient que la charge utile. Cela les rend beaucoup plus efficaces en termes de performances web et de bande passante.

  • Performances du Web : un cookie se charge plus rapidement car il contient moins d'informations. Pensez au fait qu'une photo se télécharge plus rapidement qu'une vidéo.
  • Bande passante : les cookies étant plus petits, ils réduisent la quantité totale de données qui doivent transiter sur les réseaux entre le client et le serveur. Cela peut entraîner des économies par rapport aux JWT pour l'opérateur de l'application web.

Les JWT ne sont pas optimisés pour les performances car ils comportent des signatures numériques, qui garantissent que leur contenu n'a pas été falsifié. Mais si une application Web utilise HTTPS (comme il se doit), un cookie devrait de toute façon être inviolable. HTTPS chiffrera et signera le cookie avec toutes les autres données HTTP échangées entre le client et le serveur, et les attaquants ne devraient pas être en mesure de le falsifier ou de l'intercepter en transit, à moins qu'ils ne mènent une attaque on-path.

Les JWT sont mieux adaptés aux API et aux connexions de serveur à serveur. Ces utilisations n'ont pas besoin d'évoluer autant : une application web peut avoir un million d'utilisateurs, mais elle n'aura pas un million de connexions API. L'impact potentiel sur les performances et la bande passante est donc réduit. Cependant, d'autres méthodes d'authentification, comme le TLS mutuel, sont parfois plus efficaces pour les API - en savoir plus sur le TLS mutuel.

Service commercial