Intégrer Auth0 avec Azure Active Directory : SSO enterprise complet
Connecter Auth0 à Azure AD pour le SSO enterprise. Configuration OIDC et SAML, synchronisation des groupes, provisioning SCIM et gestion des licences.
Par Auth0.Expert · 2025-01-18 · 13 min de lecture
Intégrer Auth0 avec Azure Active Directory
TL;DR
Azure AD est l'IdP dominant en entreprise (300M+ utilisateurs). L'intégration Auth0↔Azure AD permet à vos clients entreprise d'utiliser leurs credentials Microsoft pour se connecter à votre application, sans créer de nouveau compte.
---
Architecture de l'intégration
Voici comment s’articule la chaîne d’authentification entre votre application, Auth0, et Azure AD, avec transmission des tokens à chaque étape.
Utilisateur → YourApp
↓ (OIDC ou SAML)
Auth0
↓ (Enterprise Connection)
Azure AD (IdP)
↓ (MFA Azure / Conditional Access)
Token Azure → Auth0 → Token Auth0 → YourApp
---
Option 1 : Azure AD comme connexion OIDC
1. Créer une app dans Azure AD
Dans cette étape, vous créez une application Azure AD qui représentera votre app côté Microsoft, afin d’obtenir les identifiants nécessaires à la connexion OIDC.
Azure Portal → Azure Active Directory → App registrations → New registration
Name: YourApp via Auth0
Redirect URI: https://YOUR_DOMAIN.auth0.com/login/callback
Avant de configurer Auth0, il faut accorder les permissions nécessaires à votre app Azure AD pour accéder aux informations utilisateur de Microsoft Graph.
// Permissions API à accorder
{
"Microsoft Graph": {
"User.Read": "Lire le profil utilisateur",
"email": "Lire l'email",
"openid": "Connexion OpenID",
"profile": "Lire le profil de base"
}
}
2. Configurer dans Auth0
Une fois l’application enregistrée sur Azure, il faut remplir les paramètres de la connexion dans Auth0 avec les identifiants récupérés.
{
"microsoft_azure_ad": {
"client_id": "AZURE_APP_CLIENT_ID",
"client_secret": "AZURE_APP_CLIENT_SECRET",
"domain": "yourcompany.onmicrosoft.com",
"tenant_domain": "yourcompany.onmicrosoft.com",
"identity_api": "microsoft-identity-platform-v2.0",
"use_wsfed": false,
"waad_protocol": "openid-connect"
}
}
---
Option 2 : Azure AD comme connexion SAML
Cette configuration permet d’utiliser Azure AD comme fournisseur d’identité SAML. On déclare dans Auth0 les endpoints SAML d’Azure AD et la correspondance des attributs.
{
"saml": {
"signInEndpoint": "https://login.microsoftonline.com/TENANT_ID/saml2",
"signOutEndpoint": "https://login.microsoftonline.com/TENANT_ID/saml2",
"signingCert": "MIIDBTCCAe2gAwIBAgIQev...",
"fieldsMap": {
"email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
"name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname",
"given_name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
"family_name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname",
"upn": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"
}
}
}
---
Synchroniser les groupes Azure AD
Ce script d’Action Auth0 Post Login récupère les groupes de l’utilisateur depuis Azure AD, puis mappe ces groupes sur des rôles personnalisés dans Auth0.
// Action Post Login : récupérer les groupes Azure AD
exports.onExecutePostLogin = async (event, api) => {
if (event.connection.strategy !== 'waad') return;
// L'access token Azure est disponible dans event.identity
const azureToken = event.identity?.access_token;
if (!azureToken) return;
// Appeler Microsoft Graph pour récupérer les groupes
const groupsResponse = await fetch(
'https://graph.microsoft.com/v1.0/me/memberOf?$select=displayName,id',
{ headers: { Authorization: `Bearer ${azureToken}` } }
);
const { value: groups } = await groupsResponse.json();
const groupNames = groups.map(g => g.displayName);
// Mapper les groupes Azure → rôles Auth0
const roleMapping = {
'IT-Admins': 'admin',
'Finance-Users': 'finance-viewer',
'All-Employees': 'user',
};
const roles = groupNames
.map(g => roleMapping[g])
.filter(Boolean);
api.accessToken.setCustomClaim('https://yourapp.com/roles', roles);
api.user.setAppMetadata('azure_groups', groupNames);
};
Ce code orchestre la synchronisation dynamique des groupes d’Azure AD vers les rôles Auth0 à chaque connexion.
---
SCIM Provisioning : synchronisation automatique des utilisateurs
Voici un exemple d’endpoint SCIM qui permet à Azure AD de créer ou mettre à jour des utilisateurs sur Auth0, facilitant l’automatisation et le cycle de vie des comptes.
# Endpoint SCIM pour Auth0 (/scim/v2/Users)
# Azure AD pousse les créations/modifications/suppressions
from fastapi import FastAPI, Request, Header, HTTPException
app = FastAPI()
@app.post("/scim/v2/Users")
async def create_user(request: Request, authorization: str = Header(None)):
if authorization != f"Bearer {SCIM_TOKEN}":
raise HTTPException(401)
data = await request.json()
# Créer l'utilisateur dans Auth0 via Management API
user = {
"connection": "azure-ad-users",
"email": data["emails"][0]["value"],
"name": data["displayName"],
"given_name": data["name"]["givenName"],
"family_name": data["name"]["familyName"],
"user_metadata": {
"department": data.get("urn:ietf:params:scim:schemas:extension:enterprise:2.0:User", {}).get("department"),
"employee_id": data.get("urn:ietf:params:scim:schemas:extension:enterprise:2.0:User", {}).get("employeeNumber"),
}
}
result = await create_auth0_user(user)
return {
"id": result["user_id"],
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": data["userName"],
"meta": {"resourceType": "User", "created": result["created_at"]}
}
Cet endpoint reçoit les notifications SCIM d’Azure AD et gère la création et mise à jour des comptes utilisateurs dans Auth0.
---
Conditional Access Azure : intégration
Azure AD Conditional Access renforce la sécurité en appliquant ses politiques (état de conformité, MFA, etc.) avant même d’atteindre Auth0.
Azure Conditional Access Policy :
Condition: Device compliant = false
Action: Block access (Auth0 ne reçoit jamais la requête)
Pour exiger une réévaluation des politiques Conditional Access à chaque connexion, ajoutez le paramètre prompt=login lors de la requête Auth0.
// Paramètre prompt=login force re-évaluation Conditional Access
window.location.href = `https://YOUR_DOMAIN.auth0.com/authorize?
connection=azure-ad&
prompt=login& // Forcer re-evaluation CA
...`;
---
Tableau comparatif OIDC vs SAML pour Azure AD
Ce tableau compare les principales différences entre intégration OIDC et SAML pour Azure AD sur Auth0.
| Critère | OIDC (recommandé) | SAML | |---------|------------------|------| | Setup | Simple | Complexe | | Refresh token | ✅ | ❌ | | Groupes | Via Graph API | Via attributs SAML | | Conditional Access | ✅ | ✅ | | Mobile apps | ✅ | ❌ |
---
Dépannage courant
Voici une liste des erreurs fréquentes et comment les corriger lors de la connexion Azure AD sur Auth0.
| Erreur | Cause | Solution | |--------|-------|----------| | AADSTS50011 | Redirect URI incorrecte | Vérifier exact match dans Azure | | AADSTS700016 | Application non trouvée | Vérifier tenant ID | | Groupes vides | Consent manquant | Accorder GroupMember.Read.All | | Email absent | Permission user.read manquante | Ajouter User.Read |
---
> 🏢 Intégration Azure AD : nous configurons l'intégration Auth0↔Azure AD de votre organisation avec SCIM, groupes et Conditional Access en 3 jours ouvrés.
📞 +33 1 23 45 67 89 · 📧 [email protected]
Autres articles
- Auth0 et OAuth 2.0 : architecture complète pour comprendre les flux d'autorisation
- OpenID Connect sur Auth0 : ID Token, UserInfo et discovery endpoint expliqués
- Configurer SAML 2.0 avec Auth0 : guide complet pour l'entreprise
- Migrer des Rules vers les Auth0 Actions : guide pas à pas
- Architecture multi-tenant avec Auth0 : organisations, isolation et bonnes pratiques
- Validation des JWT Auth0 : RS256 vs HS256, JWKS et pièges communs
- Concevoir son architecture de tenants Auth0 : dev, staging, prod
- Configurer un domaine personnalisé Auth0 : login.votredomaine.com étape par étape