<p>Bonjour,</p>
<p>La distinction entre <strong>Enterprise Application</strong> et <strong>App Registration</strong> dans Azure Active Directory (maintenant appelé <strong>Microsoft Entra ID</strong>) est l’une des questions les plus fréquentes et les plus source de confusion pour les développeurs et administrateurs Azure. Ces deux concepts sont liés mais jouent des rôles fondamentalement différents. Je vais vous expliquer en détail cette relation et leurs usages respectifs.</p>
<h2><a name="p-34584-la-relation-fondamentale-application-vs-principal-de-service-1" class="anchor" href="#p-34584-la-relation-fondamentale-application-vs-principal-de-service-1" aria-label="Heading link"></a>La relation fondamentale : Application vs Principal de service</h2>
<p>Pour bien comprendre, il faut partir d’une analogie :</p>
<ul>
<li>L’<strong>App Registration</strong> (Inscription d’application) est comme le <strong>passeport</strong> de votre application — c’est sa définition d’identité globale dans votre tenant (ou dans le tenant de l’éditeur).</li>
<li>L’<strong>Enterprise Application</strong> (Application d’entreprise), aussi appelée <strong>Service Principal</strong>, est comme le <strong>visa</strong> — c’est l’instance de cette identité dans un tenant spécifique, avec les permissions accordées localement.</li>
</ul>
<h3><a name="p-34584-le-modle-objet-dazure-ad-2" class="anchor" href="#p-34584-le-modle-objet-dazure-ad-2" aria-label="Heading link"></a>Le modèle objet d’Azure AD</h3>
<pre><code class="lang-auto">Tenant A (éditeur) Tenant B (client)
┌─────────────────────────────┐ ┌──────────────────────────────┐
│ App Registration │ 1:N │ Enterprise Application │
│ (Application object) │──────>│ (Service Principal object) │
│ │ │ │
│ - Application ID (client) │ │ - Object ID (local) │
│ - Secrets / Certificats │ │ - Permissions accordées │
│ - Redirect URIs │ │ - Assignments utilisateurs │
│ - Manifest de l'app │ │ - Paramètres SSO │
└─────────────────────────────┘ └──────────────────────────────┘
</code></pre>
<p><strong>Règle fondamentale :</strong> Pour chaque App Registration dans un tenant, il existe automatiquement une Enterprise Application correspondante dans <strong>ce même tenant</strong>. Quand une autre organisation consent à utiliser votre application multi-tenant, une Enterprise Application est créée dans <strong>leur</strong> tenant.</p>
<h2><a name="p-34584-app-registration-en-dtail-3" class="anchor" href="#p-34584-app-registration-en-dtail-3" aria-label="Heading link"></a>App Registration en détail</h2>
<h3><a name="p-34584-quest-ce-quune-app-registration-4" class="anchor" href="#p-34584-quest-ce-quune-app-registration-4" aria-label="Heading link"></a>Qu’est-ce qu’une App Registration ?</h3>
<p>L’<strong>App Registration</strong> représente l’<strong>objet application global</strong> — c’est la définition de ce qu’est votre application, ses capacités et ses besoins en termes d’identité.</p>
<p><strong>Où la trouver :</strong> Azure Portal > Microsoft Entra ID > <strong>Inscriptions d’applications</strong></p>
<h3><a name="p-34584-ce-que-vous-configurez-dans-app-registration-5" class="anchor" href="#p-34584-ce-que-vous-configurez-dans-app-registration-5" aria-label="Heading link"></a>Ce que vous configurez dans App Registration</h3>
<p><strong>1. Identité de l’application</strong></p>
<ul>
<li><strong>Application (client) ID</strong> : l’identifiant unique de l’application (GUID)</li>
<li><strong>Directory (tenant) ID</strong> : le tenant propriétaire</li>
<li><strong>Object ID</strong> : l’ID de l’objet application dans le répertoire</li>
</ul>
<p><strong>2. Authentification</strong></p>
<ul>
<li><strong>Redirect URIs</strong> : les URLs de callback après authentification</li>
<li><strong>Plateforme</strong> : Web, SPA, Desktop, Mobile</li>
<li><strong>Implicit flow</strong>, <strong>Authorization code flow</strong> avec PKCE</li>
<li><strong>Logout URL</strong></li>
</ul>
<p><strong>3. Certificats et secrets</strong></p>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Créer un secret d'application via PowerShell
$app = Get-AzADApplication -ApplicationId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$secret = New-AzADAppCredential -ApplicationId $app.AppId -EndDate (Get-Date).AddYears(1)
Write-Output "Secret Value (à sauvegarder maintenant) : $($secret.SecretText)"
</code></pre>
<p><strong>4. Permissions API (ce que l’application demande)</strong></p>
<ul>
<li><strong>Delegated permissions</strong> : agit au nom d’un utilisateur connecté</li>
<li><strong>Application permissions</strong> : agit en son propre nom (daemon/service)</li>
</ul>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Ajouter une permission API via Azure CLI
az ad app permission add \
--id "votre-app-id" \
--api "00000003-0000-0000-c000-000000000000" \ # Microsoft Graph
--api-permissions "User.Read=Scope" # Permission déléguée
</code></pre>
<p><strong>5. Expose an API (ce que l’application expose)</strong></p>
<ul>
<li>Définition des <strong>scopes</strong> personnalisés</li>
<li><strong>Application ID URI</strong> (ex: <code>api://votre-app-id</code>)</li>
</ul>
<p><strong>6. Owners et App Roles</strong></p>
<h3><a name="p-34584-qui-gre-les-app-registrations-6" class="anchor" href="#p-34584-qui-gre-les-app-registrations-6" aria-label="Heading link"></a>Qui gère les App Registrations ?</h3>
<p>Typiquement, les <strong>développeurs</strong> et les <strong>architectes d’identité</strong> gèrent les App Registrations. Il faut le rôle <strong>Application Developer</strong> ou <strong>Global Administrator</strong> dans Azure AD.</p>
<h2><a name="p-34584-enterprise-application-en-dtail-7" class="anchor" href="#p-34584-enterprise-application-en-dtail-7" aria-label="Heading link"></a>Enterprise Application en détail</h2>
<h3><a name="p-34584-quest-ce-quune-enterprise-application-8" class="anchor" href="#p-34584-quest-ce-quune-enterprise-application-8" aria-label="Heading link"></a>Qu’est-ce qu’une Enterprise Application ?</h3>
<p>L’<strong>Enterprise Application</strong> (Service Principal) représente l’<strong>instance locale</strong> d’une application dans un tenant spécifique. C’est ici que se gère <strong>qui peut utiliser l’application</strong> et <strong>quelles permissions ont été accordées</strong>.</p>
<p><strong>Où la trouver :</strong> Azure Portal > Microsoft Entra ID > <strong>Applications d’entreprise</strong></p>
<h3><a name="p-34584-ce-que-vous-configurez-dans-enterprise-application-9" class="anchor" href="#p-34584-ce-que-vous-configurez-dans-enterprise-application-9" aria-label="Heading link"></a>Ce que vous configurez dans Enterprise Application</h3>
<p><strong>1. Propriétés générales</strong></p>
<ul>
<li>Activation/désactivation pour les utilisateurs</li>
<li>Visibilité dans le portail My Apps</li>
<li>Logo et informations d’affichage</li>
</ul>
<p><strong>2. Gestion des utilisateurs et groupes (Assignments)</strong></p>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Assigner un utilisateur à une Enterprise Application
$servicePrincipal = Get-AzADServicePrincipal -ApplicationId "votre-app-id"
$user = Get-AzADUser -UserPrincipalName "utilisateur@domain.com"
New-AzADServicePrincipalAppRoleAssignment -ServicePrincipalId $servicePrincipal.Id
-PrincipalId $user.Id -ResourceId $servicePrincipal.Id
-AppRoleId "00000000-0000-0000-0000-000000000000" # Default role
</code></pre>
<p><strong>3. Single Sign-On (SSO)</strong></p>
<ul>
<li><strong>SAML</strong> : pour l’intégration avec des applications tierces</li>
<li><strong>OIDC/OAuth2</strong> : pour les applications modernes</li>
<li><strong>Password-based SSO</strong> : pour les applications legacy</li>
<li><strong>Linked</strong> : pour les applications avec SSO externe existant</li>
</ul>
<p><strong>4. Provisionnement automatique (SCIM)</strong></p>
<ul>
<li>Synchronisation automatique des utilisateurs vers l’application</li>
<li>Désactivation automatique lors du départ d’un employé</li>
</ul>
<p><strong>5. Permissions accordées (Consent)</strong></p>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Accorder le consentement administrateur pour une permission
az ad app permission admin-consent --id "votre-app-id"
Lister les permissions accordées
az ad app permission list-grants --id "votre-app-id"
</code></pre>
<p><strong>6. Conditional Access</strong></p>
<ul>
<li>Application de politiques d’accès conditionnel</li>
<li>Exigence de MFA, conformité des appareils, etc.</li>
</ul>
<h3><a name="p-34584-qui-gre-les-enterprise-applications-10" class="anchor" href="#p-34584-qui-gre-les-enterprise-applications-10" aria-label="Heading link"></a>Qui gère les Enterprise Applications ?</h3>
<p>Typiquement, les <strong>administrateurs IT</strong> et les <strong>gestionnaires d’identité</strong> gèrent les Enterprise Applications. Les rôles <strong>Cloud Application Administrator</strong> ou <strong>Global Administrator</strong> sont nécessaires.</p>
<h2><a name="p-34584-tableau-comparatif-synthtique-11" class="anchor" href="#p-34584-tableau-comparatif-synthtique-11" aria-label="Heading link"></a>Tableau comparatif synthétique</h2>
<div class="md-table">
<table>
<thead>
<tr>
<th>Aspect</th>
<th>App Registration</th>
<th>Enterprise Application</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Autre nom</strong></td>
<td>Application object</td>
<td>Service Principal</td>
</tr>
<tr>
<td><strong>Portée</strong></td>
<td>Globale (multi-tenant possible)</td>
<td>Locale au tenant</td>
</tr>
<tr>
<td><strong>Propriétaire</strong></td>
<td>Développeurs / ISV</td>
<td>Administrateurs IT</td>
</tr>
<tr>
<td><strong>Configure</strong></td>
<td>Ce QUE fait l’app</td>
<td>QUI utilise l’app</td>
</tr>
<tr>
<td><strong>Existence</strong></td>
<td>Dans le tenant propriétaire</td>
<td>Dans chaque tenant utilisant l’app</td>
</tr>
<tr>
<td><strong>Secrets/Certs</strong></td>
<td>Oui</td>
<td>Non</td>
</tr>
<tr>
<td><strong>SSO Config</strong></td>
<td>Non</td>
<td>Oui</td>
</tr>
<tr>
<td><strong>User Assignment</strong></td>
<td>Non</td>
<td>Oui</td>
</tr>
<tr>
<td><strong>Consent</strong></td>
<td>Demande les permissions</td>
<td>Reçoit le consentement</td>
</tr>
<tr>
<td><strong>Conditional Access</strong></td>
<td>Non</td>
<td>Oui</td>
</tr>
<tr>
<td><strong>SCIM Provisioning</strong></td>
<td>Non</td>
<td>Oui</td>
</tr>
</tbody>
</table>
</div><h2><a name="p-34584-cas-pratiques-quand-utiliser-quoi-12" class="anchor" href="#p-34584-cas-pratiques-quand-utiliser-quoi-12" aria-label="Heading link"></a>Cas pratiques : quand utiliser quoi ?</h2>
<h3><a name="p-34584-scnario-1-dvelopper-une-nouvelle-application-13" class="anchor" href="#p-34584-scnario-1-dvelopper-une-nouvelle-application-13" aria-label="Heading link"></a>Scénario 1 : Développer une nouvelle application</h3>
<p>Vous développez une application web qui s’authentifie avec Azure AD :</p>
<ol>
<li><strong>Créez une App Registration</strong> pour définir votre application</li>
<li>Configurez les Redirect URIs, les permissions Microsoft Graph nécessaires</li>
<li>Récupérez le <code>client_id</code> et <code>tenant_id</code> pour votre code</li>
<li>Une Enterprise Application est créée automatiquement dans votre tenant</li>
</ol>
<h3><a name="p-34584-scnario-2-intgrer-une-application-saas-tierce-ex-salesforce-servicenow-14" class="anchor" href="#p-34584-scnario-2-intgrer-une-application-saas-tierce-ex-salesforce-servicenow-14" aria-label="Heading link"></a>Scénario 2 : Intégrer une application SaaS tierce (ex: Salesforce, ServiceNow)</h3>
<p>L’administrateur IT configure l’accès SSO :</p>
<ol>
<li>Dans <strong>Enterprise Applications</strong>, cliquez sur <strong>“+ Nouvelle application”</strong></li>
<li>Cherchez l’application dans la galerie Azure AD</li>
<li>Configurez le <strong>SSO SAML</strong></li>
<li><strong>Assignez les utilisateurs et groupes</strong></li>
<li>Activez le <strong>provisionnement SCIM</strong> si disponible</li>
</ol>
<p>Ici, <strong>aucune App Registration n’est créée</strong> par l’administrateur — l’éditeur du SaaS l’a déjà fait dans son tenant.</p>
<h3><a name="p-34584-scnario-3-servicedaemon-sans-utilisateur-client-credentials-flow-15" class="anchor" href="#p-34584-scnario-3-servicedaemon-sans-utilisateur-client-credentials-flow-15" aria-label="Heading link"></a>Scénario 3 : Service/Daemon sans utilisateur (Client Credentials Flow)</h3>
<pre data-code-wrap="python"><code class="lang-python"># Authentification d'un service sans utilisateur
import msal
app = msal.ConfidentialClientApplication(
client_id="votre-client-id", # Depuis App Registration
client_credential="votre-secret", # Depuis App Registration
authority=f"https://login.microsoftonline.com/{tenant_id}"
)
result = app.acquire_token_for_client(
scopes=["https://graph.microsoft.com/.graph.default"]
)
</code></pre>
<p>Pour ce cas :</p>
<ul>
<li><strong>App Registration</strong> : configure le secret et la permission Application (ex: <code>User.Read.All</code>)</li>
<li><strong>Enterprise Application</strong> : l’admin accorde le consentement administrateur</li>
</ul>
<h2><a name="p-34584-la-confusion-courante-mme-objet-deux-vues-16" class="anchor" href="#p-34584-la-confusion-courante-mme-objet-deux-vues-16" aria-label="Heading link"></a>La confusion courante : même objet, deux vues</h2>
<p>Quand vous créez une App Registration, vous voyez <strong>deux entrées</strong> dans Azure AD :</p>
<ul>
<li>Une dans <strong>“Inscriptions d’applications”</strong> (App Registration)</li>
<li>Une dans <strong>“Applications d’entreprise”</strong> (Enterprise Application)</li>
</ul>
<p>Ce sont deux <strong>vues différentes du même objet applicatif</strong>. Vous pouvez naviguer entre elles via le portail. Si vous supprimez l’App Registration, la Enterprise Application correspondante est également supprimée.</p>
<hr>
<p>Pour résumer : pensez à l’App Registration comme la <strong>carte d’identité</strong> de votre application (qui elle est, ce dont elle a besoin), et à l’Enterprise Application comme le <strong>contrat d’utilisation</strong> dans votre organisation (qui peut l’utiliser, avec quelles permissions, sous quelles conditions).</p>
<p>N’hésitez pas à me poser des questions sur un scénario spécifique — configuration SSO, gestion des permissions, ou implémentation d’un flux d’authentification particulier. Je suis là pour vous aider à approfondir n’importe quel aspect de la gestion des identités Azure AD.</p>