deployer une api graphql sécurisée en node.js avec docker et oauth2
12/11/2025
Dans un contexte où les startups et PME cherchent à offrir des API flexibles tout en garantissant la sécurité, GraphQL s’impose comme une solution moderne. Ce tutoriel vous guide pas à pas pour déployer une API GraphQL sécurisée en Node.js avec Docker et OAuth2, depuis la configuration initiale jusqu’aux bonnes pratiques de production.
étape 1 : initialiser le projet GraphQL en Node.js
1.1 – Créer la base avec Express et Apollo Server
mkdir graphql-api && cd graphql-api
npm init -y
npm install express apollo-server-express graphql passport passport-oauth2 jsonwebtoken
// index.js
const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
const passport = require('passport');
const OAuth2Strategy = require('passport-oauth2');
const jwt = require('jsonwebtoken');
// Schéma GraphQL simple
const typeDefs = gql`
type Query { hello: String }
`;
const resolvers = { Query: { hello: () => 'Hello from GraphQL' } };
const server = new ApolloServer({ typeDefs, resolvers });
// Config OAuth2 (exemple générique)
passport.use(new OAuth2Strategy({
authorizationURL: 'https://auth.exemple.com/authorize',
tokenURL: 'https://auth.exemple.com/token',
clientID: 'VOTRE_CLIENT_ID',
clientSecret: 'VOTRE_SECRET',
callbackURL: '/auth/callback'
}, (accessToken, refreshToken, profile, cb) => cb(null, { accessToken })));
const app = express();
app.use(passport.initialize());
app.use('/graphql', passport.authenticate('oauth2', { session: false }), server.getMiddleware());
app.listen(4000, () => console.log('🚀 GraphQL ready on http://localhost:4000/graphql'));
1.2 – Gérer les erreurs et tokens JWT
- Validez le accessToken dans chaque requête et renvoyez HTTP 401 si expiré.
- Générez un JWT local pour vos microservices internes :
jwt.sign({ sub: user.id }, 'SECRET', { expiresIn: '1h' }).
étape 2 : containeriser avec Docker
2.1 – Rédiger le Dockerfile
FROM node:20-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 4000
CMD ["node", "index.js"]
2.2 – Orchestration avec docker-compose
version: '3.8'
services:
graphql-api:
build: .
ports:
- "4000:4000"
environment:
- NODE_ENV=production
- CLIENT_ID=${CLIENT_ID}
- CLIENT_SECRET=${CLIENT_SECRET}
Commandes clés :
docker-compose build
docker-compose up -d
docker logs -f graphql-api
étape 3 : sécurité et bonnes pratiques
3.1 – Limiter la profondeur et la complexité des requêtes
npm install graphql-depth-limit
const depthLimit = require('graphql-depth-limit');
const server = new ApolloServer({
typeDefs, resolvers,
validationRules: [ depthLimit(5) ]
});
3.2 – Metriques perf et recommandations OWASP
| Métrique | Objectif |
|---|---|
| Taille max d’une requête | 50 KB |
| Limite d’appels/sec | 100 req/s |
| Score OWASP API Security 2025 | ≥ 80 % |
– Pensez à chiffrer les variables sensibles via dotenv et à activer le mode strict en production.
– Pour un déploiement complet, orientez-vous vers un reverse-proxy Nginx devant le conteneur.
conclusion
Vous disposez désormais d’une API GraphQL en Node.js sécurisée par OAuth2, containerisée et prête pour la production. N’hésitez pas à étendre ce modèle vers un cluster Docker Swarm ou Kubernetes pour plus d’échelle. Pour un accompagnement personnalisé sur vos projets web, contactez notre équipe.

