intégrer l’authentification Microsoft Entra ID dans une API express.js node.js
18/08/2025
authentification Microsoft Entra ID API Express.js
Dans ce tutoriel, nous allons sécuriser une API Node.js avec Express.js en utilisant Microsoft Entra ID (anciennement Azure AD). Vous apprendrez à enregistrer votre application dans Azure, intégrer la bibliothèque MSAL, protéger vos routes et gérer les erreurs fréquentes.
1. Enregistrer l’application dans Microsoft Entra ID
- Installez et connectez-vous à l’interface Azure CLI :
az login
- Créez un nouvel enregistrement d’application :
az ad app create \ --display-name "MyExpressApi" \ --identifier-uris "api://your-tenant-id/myexpressapi" \ --reply-urls "https://localhost:3000/auth/callback"
- Notez l’appId et ajoutez un secret client :
az ad app credential reset \ --id YOUR_APP_ID \ --credential-description "APISecret" \ --years 1
2. Préparer votre projet Node.js
- Initialisez votre projet et installez les dépendances :
npm init -y npm install express msal @azure/msal-node dotenv
- Créez un fichier
.env
:TENANT_ID=your-tenant-id CLIENT_ID=your-app-id CLIENT_SECRET=your-client-secret API_URI=api://your-tenant-id/myexpressapi
3. Intégrer MSAL et configurer le middleware
const express = require('express');
const { ConfidentialClientApplication } = require('@azure/msal-node');
require('dotenv').config();
const msalConfig = {
auth: {
clientId: process.env.CLIENT_ID,
authority: `https://login.microsoftonline.com/${process.env.TENANT_ID}`,
clientSecret: process.env.CLIENT_SECRET
}
};
const cca = new ConfidentialClientApplication(msalConfig);
const app = express();
// Middleware de vérification du token
async function verifyToken(req, res, next) {
const authHeader = req.headers.authorization || '';
const token = authHeader.replace('Bearer ', '');
try {
const result = await cca.acquireTokenOnBehalfOf({
oboAssertion: token,
scopes: [`${process.env.API_URI}/.default`]
});
req.user = result.account;
next();
} catch (err) {
console.error('Token validation error:', err);
res.status(401).json({ error: 'Invalid token' });
}
}
app.use(express.json());
4. Protéger vos routes Express
app.get('/api/secure-data', verifyToken, (req, res) => {
res.json({ message: 'Données protégées', user: req.user.username });
});
app.listen(3000, () => {
console.log('API sécurisée démarrée sur http://localhost:3000');
});
5. Erreurs fréquentes et résolution
- InvalidAudience : vérifiez que
API_URI
dans Azure et votre.env
correspondent exactement. - UnauthorizedClient : assurez-vous d’avoir bien attribué la permission « Access as user » dans la section API permissions de l’app Azure.
- CORS : si vous consommez l’API depuis un navigateur, activez CORS dans Express ou configurez votre proxy.
6. Bonnes pratiques performance et sécurité
- Cachez les tokens : évitez de redemander un jeton pour chaque requête, utilisez Node.js memory cache ou Redis.
- Rotation des secrets : planifiez la mise à jour du client secret avant expiration (évitez les interruptions).
- Logs et monitoring : intégrez un logger (p.ex. Winston) pour tracer les échecs d’authentification.
- HTTPS obligatoire : déployez derrière Nginx ou un équivalent (Express.js même en prod doit utiliser TLS).
Conclusion
En quelques étapes, vous avez mis en place une authentification robuste avec Microsoft Entra ID pour votre API Express.js. Cette solution améliore la sécurité et s’intègre à l’écosystème Azure. Pour aller plus loin, explorez notre offre développement d’application web ou contactez-nous pour un accompagnement sur-mesure.
Besoin d’aide pour sécuriser vos API ? Contactez nos experts.