implémenter l’authentification oauth2 keycloak dans une api node.js express
24/10/2025
implémenter l’authentification OAuth2 Keycloak dans une API Node.js Express
Dans ce tutoriel, nous allons sécuriser une API REST Node.js (Express) en déployant Keycloak via Docker et en configurant OAuth2. À l’issue de ce guide, votre startup ou PME disposera d’un système d’authentification robuste, extensible et conforme aux bonnes pratiques de sécurité.
prérequis
- Node.js ≥14 et Express.js
- Docker ≥20 (voir Docker)
- Client HTTP (Postman, cURL)
- Clé API Keycloak ou accès admin
1. déploiement de Keycloak en conteneur Docker
- Créer un fichier
docker-compose.yml:
version: '3.8'
services:
keycloak:
image: quay.io/keycloak/keycloak:21.1.1
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: AdminPass123
command: start-dev
ports:
- "8080:8080"
Commandes pour lancer :
docker-compose up -d
docker logs -f # vérifier le démarrage en ~15s
configuration du realm et client OAuth2
- Se connecter à l’interface admin : http://localhost:8080 (admin/AdminPass123).
- Créer un realm (ex.
my-app). - Ajouter un client
- Client ID :
node-api - Accès public : désactivé
- Credentials : noter le
secret - Valid Redirect URIs :
http://localhost:3000/*
- Client ID :
2. intégration dans votre API Node.js
Installer la dépendance keycloak-connect :
npm install keycloak-connect express-session
Exemple minimal :
const express = require('express');
const session = require('express-session');
const Keycloak = require('keycloak-connect');
const app = express();
app.use(session({ secret: 'session-secret', resave: false, saveUninitialized: true }));
const keycloak = new Keycloak({ store: new session.MemoryStore() }, {
clientId: 'node-api',
bearerOnly: true,
serverUrl: 'http://localhost:8080',
realm: 'my-app',
credentials: { secret: 'VOTRE_SECRET_ICI' }
});
app.use(keycloak.middleware());
app.get('/api/public', (req, res) => {
res.json({ msg: 'accès public' });
});
app.get('/api/private', keycloak.protect(), (req, res) => {
res.json({ msg: 'accès restreint, utilisateur ' + req.kauth.grant.access_token.content.preferred_username });
});
app.listen(3000, () => console.log('API démarrée sur port 3000'));
test de l’authentification
- Récupérer un access token via cURL :
curl -X POST 'http://localhost:8080/realms/my-app/protocol/openid-connect/token' \
-d 'grant_type=password&client_id=node-api' \
-d 'username=admin&password=AdminPass123' \
-d 'client_secret=VOTRE_SECRET_ICI'
Ensuite, appeler l’endpoint protégé :
curl http://localhost:3000/api/private \
-H 'Authorization: Bearer VOTRE_ACCESS_TOKEN'
3. bonnes pratiques sécurité et perf
- Limiter le CORS au domaine de votre front-end.
- Renouveler les secrets tous les 90 jours (automatiser via
cronou Vault). - Activer HTTPS en frontal (Nginx, service d’application web Novane).
- Mesurer le temps de validation du token : viser <50 ms (profilage Node.js).
- Surveiller les erreurs avec un outil APM (Sentry, Datadog).
conclusion
En quelques étapes, vous avez mis en place une authentification OAuth2 Keycloak pour votre API Node.js Express, garantissant sécurité, évolutivité et conformité. Cette solution s’intègre facilement dans une architecture microservices ou monolithe et s’adapte à vos besoins en termes de gestion des utilisateurs.
Pour aller plus loin ou intégrer cette configuration dans un projet existant, contactez nos experts ou découvrez nos réalisations Node.js.
Besoin d’un accompagnement complet ? N’hésitez pas à demander un devis.

