S’authentifier auprès des ressources Azure à partir d’applications .NET hébergées localement

Les applications hébergées en dehors d’Azure (par exemple, localement ou dans un centre de données tiers) doivent utiliser un principal de service d’application pour s’authentifier auprès d’Azure lors de l’accès aux ressources Azure. Les objets principaux du service d’application sont créés à l’aide du processus d’inscription d’application dans Azure. Lorsqu’un principal de service d’application est créé, un ID client et une clé secrète client sont générés pour votre application. L’ID client, la clé secrète client et votre ID de locataire sont ensuite stockés dans des variables d’environnement afin que la bibliothèque Azure Identity puisse les utiliser pour authentifier votre application auprès d’Azure au moment de l’exécution.

Une inscription d’application différente doit être créée pour chaque environnement dans lequel l’application est hébergée. Cela permet de configurer des autorisations de ressources propres à l’environnement pour chaque principal de service et de s’assurer qu’une application déployée dans un environnement ne communique pas avec des ressources Azure qui font partie d’un autre environnement.

1. Enregistrement de l'application dans Azure AD

Une application peut être inscrite auprès d’Azure à l’aide du Portail Azure ou d’Azure CLI.

Connectez-vous au portail Azure et suivez les étapes ci-dessous.

Instructions Capture d'écran
Dans le portail Azure :
  1. Entrez inscriptions d’applications dans la barre de recherche en haut du Portail Azure.
  2. Sélectionnez l’élément étiqueté Inscriptions d’applications sous le titre Services dans le menu qui apparaît sous la barre de recherche.
Capture d’écran montrant comment utiliser la barre de recherche supérieure dans le Portail Azure pour rechercher et accéder à la page Inscriptions d’applications.
Dans la page Inscriptions d’applications, sélectionnez + Nouvelle inscription. Capture d’écran montrant l’emplacement du bouton Nouvelle inscription dans la page inscriptions d'applications.
Dans la page Inscrire une application, remplissez le formulaire comme suit :
  1. Nom → Entrez un nom pour l’inscription de l’application dans Azure. Il est recommandé d’inclure dans ce nom le nom de l’application et l’environnement (test, prod) pour lequel l’inscription de l’application est destinée.
  2. Types de comptes pris en chargeComptes dans cet annuaire organisationnel uniquement.
Sélectionnez Inscrire pour inscrire votre application et créer le principal du service d’application.
Capture d’écran montrant comment remplir la page Inscrire une application en lui donnant un nom et en spécifiant les types de comptes pris en charge en tant que comptes dans cet annuaire organisationnel uniquement.
Dans la page Inscription de l’application pour votre application :
  1. ID d’application (client) → Il s’agit de l’ID d’application que l’application utilisera pour accéder à Azure pendant le développement local. Copiez cette valeur dans un emplacement temporaire dans un éditeur de texte, car vous en aurez besoin à une étape ultérieure.
  2. ID de répertoire (locataire) → Cette valeur sera également nécessaire à votre application lorsqu’elle s’authentifie auprès d’Azure. Copiez cette valeur dans un emplacement temporaire dans un éditeur de texte, car elle sera nécessaire à une étape ultérieure.
  3. Informations d’identification client → Vous devez définir les informations d’identification du client pour l’application avant que votre application puisse s’authentifier auprès d’Azure et utiliser les services Azure. Sélectionnez Ajouter un certificat ou un secret pour ajouter des informations d’identification pour votre application.
Capture d’écran de la page d’inscription de l’application une fois l’inscription de l’application terminée. Cette capture d’écran montre l’emplacement de l’ID d’application et de l’ID de locataire qui seront nécessaires dans une étape ultérieure. Il indique également l’emplacement du lien à utiliser pour ajouter un secret d’application pour l’application.
Dans la page Certificats et secrets, sélectionnez + Nouvelle clé secrète client. Capture d’écran montrant l’emplacement du lien à utiliser pour créer une clé secrète client sur la page certificats et secrets.
La boîte de dialogue Ajouter une clé secrète client s’affiche à droite de la page. Dans cette boîte de dialogue :
  1. Description → Entrez la valeur Current.
  2. Expire → Sélectionnez une valeur de 24 mois.
Sélectionnez Ajouter pour ajouter le secret.

IMPORTANT : Définissez un rappel dans votre calendrier avant la date d’expiration du secret. De cette façon, vous pouvez ajouter un nouveau secret avant et mettre à jour vos applications avant l’expiration de ce secret et éviter une interruption de service dans votre application.
Capture d’écran montrant la page où une nouvelle clé secrète client est ajoutée pour le principal du service d’application créé par le processus d’inscription de l’application.
Dans la page Certificats et secrets, la valeur de la clé secrète client s’affiche.

Copiez cette valeur dans un emplacement temporaire dans un éditeur de texte, car vous en aurez besoin dans une prochaine étape.

IMPORTANT : c’est la seule fois que vous verrez cette valeur. Une fois que vous aurez quitté ou actualisé cette page, vous ne pourrez plus voir cette valeur. Vous pouvez ajouter une clé secrète client supplémentaire sans invalider cette clé secrète client, mais vous ne verrez plus cette valeur.
Capture d’écran montrant la page avec la clé secrète client générée.

2 - Attribuer des rôles au principal du service d’application

Ensuite, vous devez déterminer les rôles (autorisations) dont votre application a besoin sur les ressources et affecter ces rôles à votre application. Les rôles peuvent se voir attribuer un rôle au niveau d’une ressource, d’un groupe de ressources ou d’une étendue d’abonnement. Cet exemple montre comment attribuer des rôles pour le principal de service dans l’étendue du groupe de ressources, car la plupart des applications regroupent toutes leurs ressources Azure dans un seul groupe de ressources.

Instructions Capture d'écran
Recherchez le groupe de ressources pour votre application en recherchant le nom du groupe de ressources à l’aide de la zone de recherche en haut du Portail Azure.

Accédez à votre groupe de ressources en sélectionnant le nom du groupe de ressources sous le titre Groupes de ressources dans la boîte de dialogue.
Capture d’écran montrant comment utiliser la zone de recherche supérieure dans le portail Azure pour localiser et accéder au groupe de ressources auquel vous souhaitez attribuer des rôles (autorisations).
Dans la page du groupe de ressources, sélectionnez Contrôle d’accès (IAM) dans le menu de gauche. Capture d’écran de la page du groupe de ressources montrant l’emplacement de l’élément de menu Contrôle d’accès (IAM).
Dans la page Contrôle d’accès (IAM) :
  1. Sélectionnez l’onglet Attributions de rôles.
  2. Sélectionnez + Ajouter dans le menu supérieur, puis Ajouter une attribution de rôle dans le menu déroulant résultant.
Capture d’écran montrant comment accéder à l’onglet Attributions de rôles et à l’emplacement du bouton utilisé pour ajouter des attributions de rôles à un groupe de ressources.
La page Ajouter une attribution de rôle répertorie tous les rôles qui peuvent être attribués pour le groupe de ressources.
  1. Utilisez la zone de recherche pour filtrer la liste afin de la rendre plus facile à gérer. Cet exemple montre comment filtrer les rôles d’objets blob de stockage.
  2. Sélectionnez le rôle que vous voulez attribuer.
Sélectionnez Suivant pour accéder à l’écran suivant.
Capture d’écran montrant comment filtrer et sélectionner des attributions de rôles à ajouter au groupe de ressources.
La page de rôle suivante Ajouter une attribution vous permet de spécifier l’utilisateur auquel attribuer le rôle.
  1. Sélectionnez Utilisateur, groupe ou principal de service sous Attribuer l’accès à.
  2. Sélectionnez + Sélectionner des membres sous Membres.
Une boîte de dialogue s’ouvre sur le côté droit du portail Azure.
Capture d’écran montrant la case d’option permettant d’attribuer un rôle à un groupe Microsoft Entra et le lien utilisé pour sélectionner le groupe auquel attribuer le rôle.
Dans la boîte de dialogue Sélectionner des membres :
  1. La zone de texte Sélectionner peut être utilisée pour filtrer la liste des utilisateurs et des groupes de votre abonnement. Si nécessaire, tapez les premiers caractères du principal de service que vous avez créé pour que l’application filtre la liste.
  2. Sélectionnez le principal de service associé à votre application.
Sélectionnez Sélectionner en bas de la boîte de dialogue pour continuer.
Capture d’écran montrant comment filtrer et sélectionner le groupe Microsoft Entra pour l’application dans la boîte de dialogue Sélectionner des membres.
Le principal de service s’affiche désormais comme sélectionné dans l’écran Ajouter une attribution de rôle.

Sélectionnez Vérifier + affecter pour accéder à la page finale, puis Vérifier + attribuer à nouveau pour terminer le processus.
Capture d’écran montrant la page Ajouter une attribution de rôle terminée et l’emplacement du bouton Vérifier + attribuer utilisé pour terminer le processus.

3 - Configurer des variables d’environnement pour l’application

L’objet DefaultAzureCredential recherche les informations de principal de service dans un ensemble de variables d’environnement au moment de l’exécution. Il existe plusieurs façons de configurer des variables d’environnement lors de l’utilisation de .NET en fonction de vos outils et de votre environnement.

Quelle que soit l’approche choisie, configurez les variables d’environnement suivantes lorsque vous utilisez un principal de service :

  • AZURE_CLIENT_ID → Valeur de l’ID d’application.
  • AZURE_TENANT_ID → Valeur de l’ID de locataire.
  • AZURE_CLIENT_SECRET → Mot de passe/informations d’identification générés pour l’application.

Si votre application est hébergée dans IIS, nous vous recommandons de définir des variables d’environnement par pool d’applications pour isoler les paramètres entre les applications.

appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_ID',value='00000000-0000-0000-0000-000000000000']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_TENANT_ID',value='11111111-1111-1111-1111-111111111111']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_SECRET',value='=abcdefghijklmnopqrstuvwxyz']" /commit:apphost

Vous pouvez également configurer ces paramètres directement à l’aide de l’élément applicationPools à l’intérieur du fichier applicationHost.config :

<applicationPools>
   <add name="CorePool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic">
      <environmentVariables>
         <add name="ASPNETCORE_ENVIRONMENT" value="Development" />
         <add name="AZURE_CLIENT_ID" value="00000000-0000-0000-0000-000000000000" />
         <add name="AZURE_TENANT_ID" value="11111111-1111-1111-1111-111111111111" />
         <add name="AZURE_CLIENT_SECRET" value="=abcdefghijklmnopqrstuvwxyz" />
      </environmentVariables>
   </add>
</applicationPools>

4 - Implémenter DefaultAzureCredential dans votre application

DefaultAzureCredential est une séquence bien arrêtée et ordonnée de mécanismes d’authentification auprès de Microsoft Entra. Chaque mécanisme d’authentification est une classe dérivée de la classe TokenCredential (on parle d’informations d’identification). Au moment de l’exécution, DefaultAzureCredential tente de s’authentifier en utilisant les premières informations d’identification. Si ces informations d’identification ne parviennent pas à acquérir un jeton d’accès, les informations d’identification suivantes de la séquence sont utilisées, et ainsi de suite jusqu’à l’obtention d’un jeton d’accès. De cette façon, votre application peut utiliser différentes informations d’identification dans différents environnements sans qu’il soit nécessaire d’écrire du code propre à l’environnement.

L’ordre et les emplacements dans lesquels DefaultAzureCredential recherchent les informations d’identification se trouvent dans DefaultAzureCredential.

Pour utiliser DefaultAzureCredential, ajoutez les packages Azure.Identity et éventuellement Microsoft.Extensions.Azure à votre application :

Dans un terminal de votre choix, accédez au répertoire du projet d’application et exécutez les commandes suivantes :

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Les services Azure sont accessibles à l’aide de classes clientes spécialisées à partir des différentes bibliothèques de client du Kit de développement logiciel (SDK) Azure. Ces classes et vos propres services personnalisés doivent être inscrits afin qu’ils soient accessibles par le biais de l’injection de dépendances dans votre application. Dans Program.cs, effectuez les étapes suivantes pour inscrire une classe cliente et DefaultAzureCredential :

  1. Incluez les espaces de noms Azure.Identity et Microsoft.Extensions.Azure via les directives using.
  2. Inscrivez le client du service Azure à l’aide de la méthode d’extension correspondante préfixée avec Add.
  3. Passez une instance de DefaultAzureCredential à la méthode UseCredential.

Par exemple :

using Microsoft.Extensions.Azure;
using Azure.Identity;

builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));
    clientBuilder.UseCredential(new DefaultAzureCredential());
});

Une alternative à UseCredential consiste à instancier directement DefaultAzureCredential :

using Azure.Identity;

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Lorsque le code précédent s’exécute sur votre poste de travail de développement local, il recherche dans les variables d’environnement un principal de service d’application ou, dans les outils de développement installés localement comme Visual Studio, un ensemble d’informations d’identification de développeur. Vous pouvez utiliser l’une ou l’autre de ces approches pour authentifier l’application auprès des ressources Azure pendant le développement local.

Quand vous le déployez sur Azure, ce même code peut également authentifier votre application auprès d’autres ressources Azure. DefaultAzureCredential peut récupérer les paramètres d’environnement et les configurations d’identité managée pour s’authentifier automatiquement auprès d’autres services.