Exercice — Page de connexion et vérification IAM
Construisez une page de connexion minimale en distinguant identification, authentification et autorisation, avec un mot de passe haché côté serveur.
Objectif : créer une page de connexion qui distingue clairement les trois étapes IAM — identification (email), authentification (mot de passe vérifié contre un hash), autorisation (rôle admin). Vous pratiquez les notions de base de l'authentification et les pièges de sécurité.
Le projet : une connexion sécurisée
Créez login.html + un petit serveur Node (server.js) qui :
- reçoit
email+mot de passeen POST ; - compare le mot de passe à un hash stocké (jamais en clair) ;
- renvoie un statut
adminouuserselon le rôle.
Étapes pas à pas
1. Identification
Le formulaire collecte email — c'est qui vous prétendez être.
2. Authentification
Le serveur compare le mot de passe au hash stocké (ex. bcrypt.compare).
Ne stockez jamais le mot de passe en clair.
3. Autorisation
Après authentification, vérifiez le rôle : admin accède au panneau,
user non.
4. Réponse
Renvoyez { ok, role } ; en échec, 401.
Le projet complet (côté serveur)
const express = require("express")
const bcrypt = require("bcrypt")
// Hash préalablement généré : bcrypt.hash("secret", 10)
const utilisateurs = [
{ email: "admin@x.fr", hash: "$2b$10$Exemple...", role: "admin" },
]
const app = express()
app.use(express.json())
app.post("/login", async (req, res) => {
const { email, motDePasse } = req.body
const user = utilisateurs.find(u => u.email === email)
if (!user) return res.status(401).json({ ok: false })
const valide = await bcrypt.compare(motDePasse, user.hash)
if (!valide) return res.status(401).json({ ok: false })
res.json({ ok: true, role: user.role }) // autorisation
})
app.listen(3000)Conseils
- Utilisez
bcrypt(ouargon2) pour hacher — jamais demd5/sha1seul. - Comparez toujours en longueur constante (
bcrypt.compare) pour éviter les attaques par chronométrage. - Le rôle (autorisation) ne doit jamais venir du client.
⚠️ Pièges à éviter
Stocker le mot de passe en clair : une fuite de base expose tous les comptes. Hachez systématiquement.
Authentification ≠ Autorisation : un utilisateur authentifié n'est pas forcément autorisé à tout faire. Vérifiez le rôle après la connexion.
Messages d'erreur trop précis : « email inconnu » vs « mot de passe faux » aide les attaquants. Préférez « identifiants invalides ».
Réutilisation des mots de passe : un site compromis expose tous les comptes réutilisant le même mot de passe. Encouragez MFA.
Critères de réussite
- Formulaire collectant email (identification) + mot de passe.
- Mot de passe comparé à un hash, jamais en clair.
- Rôle renvoyé côté serveur (autorisation).
- Message d'erreur générique en cas d'échec.
Pour aller plus loin
Relisez Concepts de Base (IAM) et Protocoles avant le quiz.
Authentification
Terminez le quiz du chapitre pour le marquer comme complété.
🔒 Activité Pratique : Mise en Place d’un Système d’Authentification Basé sur des JWT
Dans cette activité, nous allons implémenter un système d’authentification utilisant des JSON Web Tokens (JWT) avec Node.js et Express. Ce système permettra aux utilisateurs de s'inscrire, de se connecter et d'accéder à des routes protégées uniquement s'ils sont authentifiés via un JWT.
Synthèse — Authentification
Bilan de la sécurisation des accès : IAM, protocoles, sessions/JWT et défenses applicatives.