sécuriser une api node.js avec oauth2 jwt et keycloak
03/12/2025
sécuriser une API Node.js avec OAuth2, JWT et Keycloak
Dans un contexte où 43 % des failles applicatives sont liées à une authentification mal configurée (source : OWASP Top 10 2023), maîtriser OAuth2 et JWT est essentiel. Ce guide détaille l’installation de Keycloak 20.0.1 via Docker, la configuration d’un realm et l’intégration dans une API Node.js.
1. mise en place de keycloak avec docker
# Tirer l’image officielle et lancer en mode développement
docker run --name keycloak -p 8080:8080 \
-e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:20.0.1 start-dev
En moins de 30 s, Keycloak est accessible sur http://localhost:8080. Vérifiez la version via l’UI ou docker logs keycloak.
2. configuration du realm et du client OAuth2
- Connectez-vous avec admin/admin.
- Créez un Realm (ex. api-realm).
- Dans « Clients », ajoutez un client (api-client) de type openid-connect.
- Définissez « Access Type » sur confidential et notez le Secret.
- Activez PKCE et définissez les URLs de redirection (ex.
http://localhost:3000/*).
3. integration dans une application node.js
const express = require('express');
const session = require('express-session');
const Keycloak = require('keycloak-connect');
const app = express();
const memoryStore = new session.MemoryStore();
app.use(session({ secret: 'monSecret', resave: false, saveUninitialized: true, store: memoryStore }));
const keycloak = new Keycloak({ store: memoryStore }, {
clientId: 'api-client',
bearerOnly: true,
serverUrl: 'http://localhost:8080/auth',
realm: 'api-realm',
credentials: { secret: 'VOTRE_SECRET' }
});
app.use(keycloak.middleware());
app.get('/protected', keycloak.protect(), (req, res) => {
res.json({ message: 'Accès autorisé', user: req.kauth.grant.access_token.content });
});
app.listen(3000, () => console.log('API sécurisée sur port 3000'));
Ce code protège la route /protected et expose le contenu du token JWT.
4. gestion des jwt et vérification des tokens
- Les tokens JWT sont signés en RS256 par défaut.
- Récupérez les clés publiques via
http://localhost:8080/auth/realms/api-realm/protocol/openid-connect/certs. - Validez la signature, l’issuer et l’audience dans votre code si vous utilisez
jsonwebtoken.
const jwt = require('jsonwebtoken');
const publicKey = fs.readFileSync('./realm-public.pem');
function verifyToken(token) {
return jwt.verify(token, publicKey, { algorithms: ['RS256'], issuer: 'http://localhost:8080/auth/realms/api-realm' });
}
5. bonnes pratiques de sécurité
- Rotation des clés : automatisez via l’API Admin de Keycloak (v20+).
- Scopes et rôles minimaux : n’accordez que les permissions nécessaires.
- Limitation des tentatives : évitez le brute force en configurant les Brute Force Detection dans Keycloak.
- Surveillance : intégrez vos logs dans une solution dédiée (ex. ELK) pour détecter toute activité anormale.
- Référez-vous au guide Novane Application Web pour un audit complet.
6. conclusion
En suivant ces étapes, votre API Node.js bénéficie d’une authentification robuste basée sur OAuth2 et JWT. Vous réduisez les risques liés aux sessions compromises et vous vous conformez aux recommandations OWASP. Pour aller plus loin, découvrez nos services d’augmentation d’équipe technique et sécurisez vos projets dès aujourd’hui.
Besoin d’un audit de sécurité ou d’une intégration sur mesure ? Contactez notre équipe.

