TW3 — Technologies du Web 3

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 :

  1. reçoit email + mot de passe en POST ;
  2. compare le mot de passe à un hash stocké (jamais en clair) ;
  3. renvoie un statut admin ou user selon 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 (ou argon2) pour hacher — jamais de md5/sha1 seul.
  • 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é.

Tableau de bord

On this page