Back-end · 4 mondes · 12 étapes

Auth & sécurité

Mots de passe, jetons signés, failles du web et autorisation, écrits de ses mains.

Progression

0 %

0/12 étapes terminées

Intermédiaire · 10 min de lecture

Jetons et sessions

Rester connecté, sans se faire usurper

1Définition

Après la connexion, le serveur remet un jeton que le client présente à chaque requête. Deux familles : la session (un identifiant aléatoire, dont le serveur garde l'état en base) et le jeton signé (tout le contenu dans le jeton, protégé par une signature HMAC, comme un JWT).

2Principes fondamentaux

01

Signer n'est pas cacher

Un jeton signé se lit par tous ; on n'y met rien de secret.

02

Toujours vérifier la signature

Recalculer la signature du contenu reçu avec le secret du serveur, et comparer.

03

Des durées courtes

Un jeton signé ne se révoque pas : on le fait expirer vite, et on le renouvelle.

04

Un secret digne de ce nom

Long, aléatoire, hors du code source, et changé s'il fuit.

3Exemples pratiques

Session ou jeton ?

Exemple
1// Session : cookie "session=8f3a…" → le serveur cherche 8f3a… en base2// Jeton signé : "eyJwc2V1ZG8i….DBzD0Dp8…" → le serveur vérifie la signature

La session se révoque instantanément (on efface la ligne) ; le jeton signé évite une lecture en base à chaque requête.

Un cookie bien réglé

Exemple
1Set-Cookie: session=8f3a…; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=86400

HttpOnly : inaccessible au JavaScript (donc aux XSS). Secure : HTTPS seulement. SameSite : limite l'envoi depuis d'autres sites.

4Erreurs courantes

Accepter un jeton sans le vérifier

À éviter

const donnees = JSON.parse(atob(jeton.split('.')[0]));

À faire

vérifier la signature avant toute lecture

Pourquoi : N'importe qui fabrique alors le jeton de son choix.

Un jeton éternel

À éviter

{ pseudo: "codey" }  // sans exp

À faire

{ pseudo: "codey", exp: maintenant + 900 }

Pourquoi : Un jeton volé resterait valable pour toujours.

Le jeton dans localStorage

À éviter

localStorage.setItem("jeton", jeton)

À faire

cookie HttpOnly

Pourquoi : Tout script de la page — y compris un script injecté — peut lire localStorage.

5Subtilités à connaître

  • ◆L'algorithme « none » des JWT a longtemps permis de contourner des bibliothèques mal réglées : on impose l'algorithme attendu à la vérification.
  • ◆Un jeton de rafraîchissement, à longue durée et stocké à part, permet d'obtenir de nouveaux jetons courts sans redemander le mot de passe.
  • ◆Supabase, un fournisseur très utilisé, délivre des JWT signés et gère leur renouvellement ; Sys-Code, lui, gardera ses sessions dans sa propre base, avec Better Auth.

6Vérifie ta compréhension

Question 1/3

Score 0

Le contenu d'un JWT est…

Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.