Back-end · 5 mondes · 15 étapes
API avec Node
Construire une API qui répond juste, valide ce qu'elle reçoit et se protège.
Progression
0 %
0/15 étapes terminées
Avancé · 10 min de lecture
Sécurité des API
Authentifier, autoriser, limiter
1Définition
Une API protégée répond à trois questions pour chaque requête : qui appelle (authentification, sinon 401), en a-t-il le droit (autorisation, sinon 403), abuse-t-il (limitation de débit, sinon 429). Les middlewares appliquent ces contrôles une fois pour toutes les routes.
2Principes fondamentaux
01
401 contre 403
401 : on ne sait pas qui vous êtes. 403 : on le sait, et c'est non.
02
Protéger par défaut
Une route cachée n'est pas une route protégée : les adresses se devinent et s'énumèrent.
03
Contrôler l'appartenance
Un joueur connecté ne doit lire que ses quêtes : vérifier l'identité ne suffit pas, il faut vérifier la propriété.
04
Des middlewares composables
avecJournal(avecLimite(avecAuth(route))) : chaque contrôle écrit une fois, appliqué partout.
3Exemples pratiques
Authentifier une fois pour toutes
1const avecAuth = (route) => async (request) => {2 const qui = utilisateur(request);3 if (!qui) return Response.json({ erreur: "Authentification requise." }, { status: 401 });4 return route(request, qui);5};La route protégée n'est même pas appelée sans utilisateur : l'oubli devient impossible.
Vérifier la propriété
1const quete = quetes.get(id);2if (!quete) return introuvable();3if (quete.proprietaire !== qui.pseudo) {4 return Response.json({ erreur: "Accès refusé." }, { status: 403 });5}Sans cette ligne, n'importe quel joueur connecté lirait les quêtes des autres en changeant l'identifiant de l'adresse — la faille la plus fréquente des API (IDOR).
4Erreurs courantes
Protéger par l'obscurité
À éviter
GET /admin-secret-2026/stats // sans contrôleÀ faire
avecAuth(avecRole("admin", stats))Pourquoi : Une adresse se devine, se lit dans le code de l'application, s'énumère.
Un 401 trop bavard
À éviter
{ erreur: "Mot de passe incorrect pour codey" }À faire
{ erreur: "Identifiants invalides." }Pourquoi : La précision confirme l'existence du compte à celui qui cherche à deviner.
Oublier la propriété
À éviter
GET /quetes/:id → renvoie la quête à tout utilisateur connectéÀ faire
vérifier que la quête appartient à l'utilisateurPourquoi : L'identifiant de l'adresse se modifie en une seconde.
5Subtilités à connaître
- ◆Les jetons voyagent dans chaque requête : HTTPS est indispensable, sinon ils se lisent sur le réseau.
- ◆CORS n'est pas une protection du serveur : c'est une règle du navigateur. Un script ou un outil en ligne de commande l'ignore.
- ◆Une vraie limitation de débit compte par fenêtre de temps et partage son compteur entre serveurs, souvent dans Redis.
6Vérifie ta compréhension
Question 1/3
Score 0
Jeton valide, droits insuffisants :
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.