Comment sécuriser une API REST en 2026 — OAuth 2.1, JWT, rate limiting
OAuth 2.1 (draft-15, mars 2026) rend PKCE obligatoire pour tous les clients et supprime le grant implicite. Six CVE majeures ont touché les implémentations JWT en 2025. Ce guide couvre OAuth 2.1, JWT, rate limiting, CORS, validation Zod et l'OWASP API Security Top 10 — avec du code Express.js prêt à l'emploi.

OAuth 2.1 : ce qui change
- PKCE obligatoire pour tous les clients (pas seulement les clients publics)
- Suppression du grant implicite (
response_type=token) - Suppression du ROPC (Resource Owner Password Credentials)
- Redirect URIs : correspondance exacte obligatoire
- Refresh tokens publics : sender-constrained ou rotation obligatoire
Companion RFCs : RFC 9700 (Security BCP, janv. 2025), RFC 9728 (Protected Resource Metadata). Anthropic a adopté OAuth 2.1 comme base du protocole MCP.
JWT : bonnes pratiques et vulnérabilités 2025-2026
Algorithmes : ES256 (recommandé, compact) > RS256 (fiable) > HS256 (éviter en multi-services). Access tokens : 5-15 minutes max pour les APIs sensibles.
Vulnérabilités récentes : algorithm confusion, bypass none, injection kid, manipulation JKU. TOUJOURS : valider iss, aud, exp, nbf, jti côté serveur et forcer l'algorithme côté serveur.
Refresh token rotation : chaque token à usage unique. Si réutilisé → invalider toute la session (détection de vol).
Rate limiting : stratégies et code
import { rateLimit } from 'express-rate-limit';
const globalLimiter = rateLimit({
windowMs: 15 * 60 * 1000, limit: 100,
standardHeaders: 'draft-8', legacyHeaders: false
});
const loginLimiter = rateLimit({
windowMs: 15 * 60 * 1000, max: 5,
message: "Trop de tentatives. Réessayez plus tard."
});
app.use(globalLimiter);
app.use("/login", loginLimiter);Stratégie recommandée : Sliding Window Counter — meilleur compromis précision/mémoire. Pour le scaling : Redis avec un script Lua pour le comptage atomique.
Headers de sécurité, CORS et validation Zod
Headers essentiels : Content-Security-Policy, HSTS, X-Content-Type-Options, Referrer-Policy. Helmet.js active 13 headers par défaut.
CORS : JAMAIS * avec credentials. Toujours Vary: Origin et whitelist d'origines spécifiques.
Validation Zod (standard TypeScript-first 2026) : toujours safeParse (pas de throw), middleware de validation réutilisable, protection injection avec express-mongo-sanitize.
OWASP API Security Top 10 2023 : l'essentiel
- #1 BOLA (Broken Object Level Authorization) : ~40 % des attaques API — vérifier les autorisations sur CHAQUE endpoint
- #6 NEW : Unrestricted Access to Sensitive Business Flows (scalping, faux comptes)
- #7 NEW : SSRF (Server Side Request Forgery)
3 des 5 premiers risques sont liés à l'autorisation. Tendances 2026 : mTLS pour le machine-to-machine, SPIFFE/SPIRE pour l'identité des workloads, OAuth 2.0 DPoP pour les tokens sender-constrained.