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

Azure AD Microsoft SSO

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