Date: 1er février 2026 Objectif: Authentification SSO pour avocats CESEDA Statut: Guide de configuration
Azure Active Directory (Azure AD) permet à vos avocats de se connecter avec leurs identifiants professionnels (Microsoft 365 / Office 365). C'est l'authentification la plus sécurisée pour les utilisateurs professionnels.
✅ Un compte Microsoft Azure (gratuit ou payant) ✅ Un tenant Azure AD (créé automatiquement avec Azure) ✅ Accès Admin à votre tenant Azure AD ✅ Vercel déployé (vous aurez besoin du callback URL)
A. Aller sur Azure Portal
https://portal.azure.com
B. Naviguer à Azure Active Directory
Accueil → Azure Active Directory
C. Créer une nouvelle app
Gérer → Enregistrements d'applications → Nouvel enregistrement
D. Remplir les infos
Nom: MemoLib CESEDA
Types de comptes pris en charge: Comptes dans cet annuaire organisationnel uniquement
URI de redirection:
- Plateforme: Web
- URI: https://memolib-ceseda.vercel.app/api/auth/callback/azure-ad
✅ Cliquer "Enregistrer"
A. Aller à "Certificats et secrets"
Gérer → Certificats et secrets
B. Créer un secret client
Secrets clients → Nouveau secret client
Description: NextAuth Client Secret
Expire: 24 mois
✅ Cliquer "Ajouter"
C. Copier la valeur
⚠️ IMPORTANT: Copier immédiatement la VALEUR (pas l'ID)
Vous ne pourrez pas la voir après cette page!
A. Aller à "Vue d'ensemble"
Gérer → Vue d'ensemble
B. Copier ces valeurs:
1. ID d'application (client): AZURE_CLIENT_ID
2. ID de répertoire (tenant): AZURE_TENANT_ID
3. Secret client (copié plus haut): AZURE_CLIENT_SECRET
A. Aller à "Permissions API"
Gérer → Permissions API
B. Ajouter une permission
Ajouter une permission → Microsoft Graph
C. Sélectionner "Permissions déléguées"
Rechercher et sélectionner:
✅ email
✅ profile
✅ openid
✅ User.Read
✅ Cliquer "Ajouter des permissions"
Sur Vercel, aller à:
Settings → Environment Variables
Ajouter ces 3 variables (values from Azure AD):
AZURE_CLIENT_ID=<your-client-id>
AZURE_CLIENT_SECRET=<your-client-secret>
AZURE_TENANT_ID=<your-tenant-id>✅ Redéployer le site (auto-redeploy ou manual)
Le fichier src/app/api/auth/[...nextauth]/route.ts doit avoir ce provider:
import AzureADProvider from 'next-auth/providers/azure-ad';
export const authOptions: NextAuthOptions = {
providers: [
AzureADProvider({
clientId: process.env.AZURE_CLIENT_ID!,
clientSecret: process.env.AZURE_CLIENT_SECRET!,
tenantId: process.env.AZURE_TENANT_ID!,
authorization: {
params: {
scope: 'openid profile email',
},
},
}),
// ... autres providers (GitHub, Email, Credentials)
],
// ...
};Si ce code n'existe pas, veuillez l'ajouter manuellement.
Ajouter à votre .env.local:
# Azure AD
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
AZURE_TENANT_ID=your-tenant-id
# NextAuth (existant)
NEXTAUTH_SECRET=li+95I281EhJlwgImcfdszt79uTItIipFuZ23gQrbYs=
NEXTAUTH_URL=http://localhost:3000# 1. Terminal 1: Démarrer le frontend
cd src/frontend
npm run dev
# 2. Terminal 2: (optionnel) Démarrer le backend
cd backend-python
python -m flask run --debug --port 5000
# 3. Ouvrir le navigateur
http://localhost:3000/auth/signinVous devriez voir un bouton "Sign in with Azure AD"
https://memolib-ceseda.vercel.app/auth/signin
Vous devriez voir:
- ✅ Bouton "Sign in with Azure AD"
- ✅ Autres options (GitHub, Email, etc.)
1. Cliquer "Sign in with Azure AD"
2. Vous êtes redirigé vers login.microsoft.com
3. Entrer vos identifiants Microsoft/Azure
4. Autoriser l'application
5. Vous êtes redirigé vers /dashboard
curl -I https://memolib-ceseda.vercel.app/api/auth/sessionRéponse esperée: Session JSON avec user data
Votre domaine: monorganisation.onmicrosoft.com
Utilisateurs: user@monorganisation.onmicrosoft.com
✅ Ils peuvent utiliser leurs identifiants M365
Si votre organisation a un domaine personnalisé:
Domaine: monloi.fr
Tenant Azure AD: tenant-id
✅ Utilisateurs: avocat@monloi.fr
Un avocat peut avoir plusieurs comptes:
- Compte professionnel (Azure AD) ✅
- Compte GitHub (pour dev) ✅
- Compte Email (magique link) ✅
NextAuth gérera automatiquement les sessions séparées.
❌ NE JAMAIS
- Committer le secret dans Git
- L'exposer en console log
- Le partager par email
✅ UTILISER
- Variables d'environnement Vercel
- Azure Key Vault (production)
- Secrets Manager (Doppler, 1Password)
NextAuth gère automatiquement:
- ✅ Refresh tokens
- ✅ Token expiry
- ✅ Silent refresh
Aucune configuration requise.
Ne demandez que les scopes nécessaires:
✅ openid, profile, email (pour auth basique)
❌ Mail.Read, Calendar.Read (sauf si vraiment nécessaire)
Symptôme:
error=invalid_request
The provided value for 'redirect_uri' is not valid.
Solution:
1. Vérifier l'URI dans Azure AD exactement:
https://memolib-ceseda.vercel.app/api/auth/callback/azure-ad
2. Attention aux:
- http vs https
- trailing slashes
- majuscules/minuscules
3. Redéployer Vercel (Settings → Redeploy)
Symptôme:
error: invalid_client
The OAuth client was not found.
Solution:
1. Vérifier les variables d'environnement Vercel
2. S'assurer que AZURE_CLIENT_SECRET est correctement copié
3. Attention: le secret n'est visible qu'une fois!
→ Si perdu, créer un nouveau secret
4. Redéployer
Symptôme:
Connexion Azure AD OK, mais pas d'utilisateur créé
Solution:
1. Vérifier le callback JWT dans NextAuth
2. S'assurer que prisma.user.create() est appelé
3. Vérifier les logs Vercel (Deployments → Logs)
Symptôme:
L'utilisateur se connecte mais obtient "unauthorized"
Solution:
// Dans route.ts, restricting par tenant:
if (!allowed_tenants.includes(user.tenantId)) {
throw new Error('Unauthorized');
}
// Vérifier: est-ce que l'utilisateur est dans le bon tenant?
Sur Azure Portal:
Azure Active Directory
→ Tous les services
→ Audits
→ Connexions utilisateur
→ Filtrer par "MemoLib CESEDA"
https://sentry.io → Votre projet MemoLib
→ Issues → Filtrer par "azure"
https://vercel.com → memolib → Deployments
→ Cliquer sur le deploy → Logs
→ Chercher "azure" ou "nextauth"
- NextAuth Azure AD: https://next-auth.js.org/providers/azure-ad
- Azure Portal: https://portal.azure.com
- Microsoft Graph API: https://docs.microsoft.com/graph
- NextAuth Docs: https://next-auth.js.org
Problème de configuration?
- Vérifier Azure Portal (tous les IDs copiés?)
- Vérifier Vercel Environment Variables (variables mises à jour?)
- Vérifier les logs Vercel (Deployments → Logs)
- Vérifier la console du navigateur (F12 → Console)
- Vérifier Sentry (si configuré)
Après Azure AD configuré:
- ✅ Tester connexion avec votre compte
- ✅ Tester avec d'autres utilisateurs du tenant
- ✅ Configurer les rôles (ADMIN, CLIENT)
- ✅ Ajouter les permissions par rôle
- ✅ Configurer les restrictions par tenant
Status: 🟢 Prêt à configurer Temps estimé: 15-20 minutes Complexité: Facile 🟢
Good luck! 🚀