• 10 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 28/11/2023

Donnez des accès avec les tokens

Découvrez le fonctionnement de l’échange de tokens

Voyons plus concrètement comment fonctionnent l’obtention et le rafraîchissement des JWT.

Il s’agit d’un jeu de tennis entre le client et le serveur dans lequel un token, faisant office de balle, doit constamment transiter entre le client et le serveur :

  • Le client commence toujours, et demande une paire de tokens au serveur en lui fournissant ses identifiants.

  • Pour chaque appel suivant, le client doit fournir son token d’accès.

  • Lorsque le token d’accès n’est plus valide, alors le client demande une nouvelle paire de tokens au serveur, en lui fournissant son token de rafraîchissement.

Cette chaîne dure tout le temps où l’utilisateur reste authentifié sur l’application.

Le client envoie des demandes pour accéder aux ressources au serveur avec des tokens. Si le token est valide, le serveur envoie la ressource et un token de rafraîchissement.
Le client fournit des tokens au serveur pour accéder aux ressources

Obtenez des tokens

La gestion des tokens est un processus réalisé par les applications clientes – voyons ensemble comment fonctionne ce processus. Dans ce cours, nous allons utiliser Postman. Il s’agit d’un outil permettant de modifier toutes les informations de la requête qui appelle notre API. Dans le cas de l’authentification, nous aurons besoin entre autres de modifier les headers des requêtes.

Vous pouvez obtenir des tokens via un appel POST sur l'endpoint d’obtention de tokens que nous avons configuré dans le projet.

Un identifiant et un mot de passe doivent être fournis dans le corps de la requête, sous les noms username  et password. Lorsque l’authentification est en succès, alors une paire de tokens est retournée.

En entrant l’identifiant admin-oc et le mot de passe password-oc, nous obtenons bien deux tokens refresh et access
Une paire de tokens sont retournés

C’est quoi Postman ? Pourquoi on ne reste pas dans le navigateur ?

C’est un outil de gestion de collection d’API très utile lorsqu’on travaille en équipe, mais aussi disponible gratuitement pour un seul utilisateur. Il permet de sauvegarder des appels API et de réaliser plus facilement le paramétrage de nos appels (gestion des headers, corps de la requête, etc.).

Nous pouvons voir que chaque token est un JWT, et consiste en 3 parties séparées par des points. Chacun de ces tokens a un rôle bien spécifique et doit être conservé par l’application cliente afin de garantir la connexion de l’utilisateur.

Le token d’accès doit être transmis dans le header de chaque requête faite au serveur dans la clé nommée Authorization. Cette clé doit avoir pour valeur  Bearer TOKEN, en remplaçant  TOKEN   par la valeur du token d’accès.

Dans l’onglet Headers, nous voyons la clé Authorization et le Bearer TOKEN associé
La clé Authorization et le Bearer TOKEN

De cette façon, le serveur, en recevant la requête, peut déterminer l’utilisateur réalisant la requête.

Le token d’accès a une durée de vie limitée dans le temps ; si nous décodons son payload en utilisant par exemple jwt.io :

{
    "token_type": "access",
    "exp": 1628927720,
    "jti": "63e4e6dab0494aee803fed93f24a80c1",
    "user_id": 1
}

... nous pouvons voir différentes informations :

  • token_type  indique le type de token ;

  • exp  est un timestamp indiquant jusqu’à quand ce token peut être utilisé ;

  • jti  signifie JWT ID, c’est un identifiant unique créé lors de la génération du token ;

  • user_id  est l’identifiant Django de l’utilisateur, il est ajouté par Simple JWT lors de la génération du token.

Est-il possible de modifier la durée de vie des tokens ?

Oui, la durée de vie des tokens peut être configurée dans les settings de Django.

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
}

Rafraîchissez des tokens

Lorsque le token d’accès n’est plus valide, il est nécessaire d’en créer un autre. C’est à cela que sert le token de rafraîchissement.

Il faut pour cela réaliser un appel en POST sur l’endpoint de rafraîchissement de tokens. Le token de rafraîchissement doit être transmis dans le corps de la requête sous l’attribut refresh  , et un nouveau token d’accès est alors retourné par le serveur.

Quand nous envoyons le token de rafraîchissement, un token d’accès nous est retourné dans Postman
Le token de rafraîchissement permet d’obtenir un nouveau token d’accès

Voyons comment réaliser ces appels ensemble dans le screencast ci-dessous.

N’hésitez pas à tester le fonctionnement des tokens, comment et quand ils expirent. Chaque matin en reprenant le développement du votre projet, vos tokens devront être rafraîchis, c’est signe que l’authentification fonctionne. ;)

Le code du projet est disponible sur la branche P3C1-C2 du projet. Expérimentez la gestion des tokens comme le ferait une application cliente, afin que ce processus n’ait plus de secret pour vous !

En résumé

  • Les tokens JWT sont un moyen d’assurer l’authentification des utilisateurs.

  • Les tokens d’accès et de rafraîchissement sont à conserver précieusement par les applications clientes pendant la session des utilisateurs.

  • Deux endpoints différents permettent d’une part l’obtention de tokens, et d’autre part le rafraîchissement du token d’accès.

 Maintenant que notre serveur nous permet d’obtenir et de rafraîchir des tokens, voyons dès le prochain chapitre comment limiter l’accès à certains endpoints.

Exemple de certificat de réussite
Exemple de certificat de réussite