Ce programme ne nécessite aucun fichier externe manquant (index.
htm ou autre) car il
génère dynamiquement la page de connexion et utilise les cookies et en-têtes HTTP pour
gérer l'état d'authentification.
🍪 Programme 12 : Analyse de l'Authentification Basée
sur les Cookies
Ce programme implémente un système d'authentification plus sophistiqué que Basic/Digest
Auth. Il utilise les Cookies HTTP pour maintenir une session utilisateur après une connexion
réussie, évitant ainsi de devoir renvoyer les identifiants à chaque requête.
Logique Globale
1. Vérification de Session : La fonction is_authenticated() vérifie la présence d'un Cookie
de Session valide (ESPSESSIONID=1) dans les en-têtes HTTP du client.
2. Connexion : La fonction handleLogin() gère la soumission du formulaire de connexion et,
en cas de succès, crée le cookie de session et redirige l'utilisateur.
3. Déconnexion : La déconnexion est gérée en envoyant un nouveau cookie qui invalide
l'ancien (ESPSESSIONID=0).
4. Accès Contrôlé : handleRoot() exige que l'utilisateur soit authentifié avant de servir le
contenu protégé.
1. Fonctions de Vérification et de Session
bool is_authenticated()
Ligne de Code Explication Technique et Focus/Valeur
Rôle
if Vérification d'En-tête. Point d'entrée de la
([Link]("Cookie Contrôle si la requête HTTP session.
")) { ... } entrante contient l'en-tête
Cookie, qui est l'endroit où
le navigateur stocke les
informations de session.
String cookie = Récupère la valeur Lecture des données de
[Link]("Cookie"); complète de l'en-tête session.
Cookie (ex:
ESPSESSIONID=1;
other=value).
if Validation de l'État de Mécanisme de sécurité.
([Link]("ESPSESSI Session. Recherche la
ONID=1") != -1) { ... } chaîne de session
spécifique et l'état valide
(=1) dans le cookie. Si
trouvée (!= -1), l'utilisateur
est considéré comme
authentifié.
return true; / return false; Retourne l'état
d'authentification.
void handleLogin() (Gestion Connexion/Déconnexion)
Ligne de Code Explication Technique et Focus/Valeur
Rôle
if Gestion de la Logique de déconnexion.
([Link]("DISCONNE Déconnexion. Vérifie si
CT")) { ... } l'URL contient le paramètre
?DISCONNECT=YES.
[Link]("Set-Co Envoie l'en-tête Révocation de session.
okie", "ESPSESSIONID=0"); Set-Cookie au navigateur
pour invalider la session
en cours. ESPSESSIONID=0
réinitialise le cookie de
session.
[Link]("Locati Redirige le client vers la Redirection HTTP.
on", "/login"); / page de connexion après la
[Link](301); déconnexion, en utilisant le
code de statut 301 Moved
Permanently.
if Soumission du Vérification des
([Link]("USERNAME Formulaire. Vérifie si les identifiants.
") && champs USERNAME et
[Link]("PASSWORD PASSWORD ont été soumis.
")) { ... }
if ([Link]("USERNAME") Validation des
== "admin" && Crédentiels. Logique
[Link]("PASSWORD") simple de comparaison
== "password") { ... } avec les chaînes de
caractères codées en dur.
[Link]("Set-Co Création de Session. En Établissement de session.
okie", "ESPSESSIONID=1"); cas de succès de la
connexion, cet en-tête est
envoyé pour définir le
cookie de session avec
l'état valide (=1).
[Link]("Locati Redirige l'utilisateur vers la Redirection après succès.
on", "/"); / [Link](302); page d'accueil (/) avec le
code 302 Found après
l'authentification.
(Code de génération Si la connexion échoue, le
HTML) code génère la page de
connexion contenant le
formulaire HTML.
void handleRoot() (Page Protégée)
Ligne de Code Explication Technique et Focus/Valeur
Rôle
if (!is_authenticated()) { Contrôle d'Accès. Utilise la Politique d'Accès.
return fonction de vérification. Si
[Link]("Locati l'utilisateur n'est pas
on", "/login"); authentifié, il est
[Link](302); } immédiatement redirigé
vers la page /login via une
réponse 302 Found.
String content = Génère le contenu HTML Contenu après
"<html>...<body>"; de la page protégée. authentification.
2. Configuration (setup)
Ligne de Code Explication Technique et Focus/Valeur
Rôle
[Link]("/", handleRoot); Enregistre le gestionnaire Routage de la ressource
de la racine, qui est la principale.
ressource protégée.
[Link]("/login", Enregistre le gestionnaire Routage du point d'entrée
handleLogin); de connexion, qui est la d'authentification.
ressource publique.
[Link](handle Le gestionnaire d'erreur
NotFound); 404 est public (aucune
vérification
is_authenticated n'est
requise).
3. Les Cookies vs. Basic/Digest Auth
Ce programme montre un changement de paradigme de sécurité :
● Basic/Digest Auth (Programmes 6, 7, 8) : Chaque requête nécessite un en-tête
Authorization pour valider les crédentiels (ou leur hachage). Cela est géré par la logique
du protocole HTTP.
● Cookie Auth (Programme 12) : L'utilisateur s'authentifie une seule fois via un
formulaire. Le serveur envoie un cookie au navigateur. Pour toutes les requêtes
suivantes, le navigateur renvoie automatiquement ce cookie, et le serveur utilise le cookie
comme jeton de session pour valider l'accès. C'est le modèle utilisé par la grande
majorité des sites web modernes.