Skip to content

🔁 Module 3 — Le flux d'authentification complet

Bonne lecture et bon apprentissage ! Junior TSAFACK – 12/09/2026 ⏱ Temps de lecture estimĂ© : 5 minutes


Maintenant que vous savez ce que contient un JWT (Module 2), voyons son cycle de vie complet — depuis le login jusqu’à la derniĂšre requĂȘte de la journĂ©e.

┌──────────┐ ┌──────────┐
│ Client │ ──── POST /login (email+mdp) ──â–ș │ Serveur │
└──────────┘ └──────────┘
│
Vérifie le mot de passe
(hash + comparaison)
│
GénÚre un JWT signé,
contenant sub, role, exp
│
┌──────────┐ â–Œ
│ Client │ ◄──────── { "token": "eyJhbG..." } ───┘
└──────────┘

Le serveur ne stocke rien. Contrairement Ă  une session classique, aucune ligne n’est créée dans une table sessions : toute l’information nĂ©cessaire est dans le token lui-mĂȘme, scellĂ©e par la signature.

Le client (une application web, mobile, ou un autre service) conserve ce token quelque part — nous verrons au Module 5 que oĂč on le stocke a d’énormes consĂ©quences de sĂ©curitĂ©.

Étape 3 — Chaque requĂȘte l’accompagne 📹

Section titled “Étape 3 — Chaque requĂȘte l’accompagne 📹”
┌──────────┐ GET /api/factures ┌──────────┐
│ Client │ Authorization: Bearer eyJhbG... ──â–ș│ Serveur │
└──────────┘ └──────────┘
│
1. Decoupe header.payload.signature
2. Recalcule la signature avec sa cle
3. Compare : identique ?
4. Verifie exp (pas expire ?)
5. Lit "sub" et "role" -> autorise ou non
│
┌──────────┐ â–Œ
│ Client │ ◄──────────────── 200 OK { factures } ──────────────┘
└──────────┘

Le point essentiel : aucun aller-retour vers une base de donnĂ©es ou un service tiers n’est nĂ©cessaire pour valider l’identitĂ©. C’est une opĂ©ration purement locale et rapide (quelques microsecondes de calcul cryptographique), ce qui est tout l’intĂ©rĂȘt des JWT dans une architecture distribuĂ©e avec plusieurs services.

Session classique : Client -> Serveur A -> [va interroger la base/le service d'auth] -> reponse
JWT : Client -> Serveur A -> [verifie localement, sans reseau] -> reponse

Étape 4 — L’expiration et le refresh 🔄

Section titled “Étape 4 — L’expiration et le refresh 🔄”

Un JWT porte presque toujours un claim exp (voir Module 2) : passĂ© ce dĂ©lai, il est automatiquement rejetĂ© (nous le vĂ©rifierons pour de vrai au Module 4). Comme on ne peut pas « rĂ©voquer » un JWT dĂ©jĂ  Ă©mis (il reste valide jusqu’à son expiration, quoi qu’il arrive — voir Module 5), la pratique courante est de garder sa durĂ©e de vie courte (minutes) et d’utiliser un second jeton, le refresh token, pour en obtenir un nouveau sans redemander le mot de passe :

┌──────────┐ access_token expire ! ┌──────────┐
│ Client │ POST /refresh { refresh_token } ──â–ș│ Serveur │
└──────────┘ └──────────┘
│
Verifie le refresh_token
(souvent stocke en base,
lui, revocable)
│
┌──────────┐ â–Œ
│ Client │ ◄────── nouveau access_token (JWT frais) ───────────┘
└──────────┘

Le refresh token, lui, est gĂ©nĂ©ralement une simple chaĂźne alĂ©atoire stockĂ©e cĂŽtĂ© serveur (donc rĂ©vocable Ă  tout moment) — c’est le compromis classique entre la rapiditĂ© des JWT et le besoin de pouvoir couper l’accĂšs d’un utilisateur immĂ©diatement.

  • Le JWT est Ă©mis une fois au login, puis voyage dans l’en-tĂȘte Authorization: Bearer ... de chaque requĂȘte.
  • La vĂ©rification est locale, sans base de donnĂ©es — c’est la raison d’ĂȘtre du format.
  • Un JWT ne se « dĂ©connecte » pas vraiment avant son expiration : le couple access token court + refresh token rĂ©vocable est le compromis standard.

Assez de thĂ©orie — place Ă  la pratique : au Module 4, nous allons signer, vĂ©rifier, casser et forger de vrais tokens en Python.

👉 Module 4 : Signer et vĂ©rifier un JWT en Python