Authentifier des applications .NET auprès des services Azure pendant le développement local à l’aide de principaux de service

Lors de la création d’applications cloud, les développeurs doivent déboguer et tester des applications sur leur station de travail locale. Lorsqu’une application est exécutée sur la station de travail d’un développeur pendant le développement local, elle doit toujours s’authentifier auprès des services Azure utilisés par l’application. Cet article explique comment configurer des objets de principal de service d’application dédiés à utiliser pendant le développement local.

A diagram showing how a .NET app during local development will use the developer's credentials to connect to Azure by obtaining those credentials locally installed development tools.

Les principaux de service d’application dédiés pour le développement local vous permettent de suivre le principe des privilèges minimum pendant le développement de l’application. Étant donné que les autorisations sont limitées exactement à ce qui est nécessaire pour l’application pendant le développement, le code de l’application ne peut pas accéder accidentellement à une ressource Azure destinée à une autre application. Cela empêche également les bogues de se produire lorsque l’application est déplacée en production, car l’application était trop privilégiée dans l’environnement de développement.

Un principal de service d’application est configuré pour l’application lorsque l’application est inscrite dans Azure. Lors de l’inscription d’applications pour le développement local, il est recommandé de :

  • Créez des inscriptions d’application distinctes pour chaque développeur travaillant sur l’application. Cela crée des principaux de service d’application distincts pour chaque développeur à utiliser pendant le développement local et évite aux développeurs d’avoir à partager des informations d’identification pour un seul principal de service d’application.
  • Créez des inscriptions d’applications distinctes par application. Cela limite les autorisations de l’application à ce qui est nécessaire à l’application.

Pendant le développement local, les variables d’environnement sont définies avec l’identité du principal du service d’application. Le Kit de développement logiciel (SDK) Azure pour NET lit ces variables d’environnement et utilise ces informations pour authentifier l’application auprès des ressources Azure dont elle a besoin.

1. Enregistrement de l'application dans Azure AD

Les objets de principal du service d’application sont créés avec une inscription d’application dans Azure. Pour ce faire, utilisez le Portail Azure ou 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.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
Dans la page Inscriptions d’applications, sélectionnez + Nouvelle inscription. A screenshot showing the location of the New registration button in the App registrations page.
Dans la page Inscription d’une application, remplissez le formulaire comme suit :
  1. Nom → Entrez un nom pour l’inscription de l’application dans Azure. Il est recommandé que ce nom inclue le nom de l’application, l’utilisateur pour lequel l’inscription de l’application est destinée et un identificateur tel que « dev » pour indiquer que cette inscription d’application est destinée à être utilisée dans le développement local.
  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.
A screenshot showing how to fill out the Register an application page by giving the app a name and specifying supported account types as accounts in this organizational directory only.
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.
A screenshot of the App registration page after the app registration has been completed. This screenshot shows the location of the application ID and tenant ID, which will be needed in a future step. It also shows the location of the link to use to add an application secret for the app.
Dans la page Certificats et secrets, sélectionnez + Nouvelle clé secrète client. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
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.
A screenshot showing the page where a new client secret is added for the application service principal create by the app registration process.
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 à une étape ultérieure.

IMPORTANT : C’est la seule fois où vous verrez cette valeur. Une fois que vous avez 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.
A screenshot showing the page with the generated client secret.

2 - Créer un groupe de sécurité Azure AD pour le développement local

Étant donné qu’il existe généralement plusieurs développeurs qui travaillent sur une application, il est recommandé de créer un groupe Azure AD pour encapsuler les rôles (autorisations) dont l’application a besoin dans le développement local plutôt que d’attribuer les rôles à des objets de principal de service individuels. Cela offre les avantages suivants.

  • Chaque développeur est assuré d’avoir les mêmes rôles attribués, car les rôles sont attribués au niveau du groupe.
  • Si un nouveau rôle est nécessaire pour l’application, il doit uniquement être ajouté au groupe Azure AD pour l’application.
  • Si un nouveau développeur rejoint l’équipe, un nouveau principal de service d’application est créé pour le développeur et ajouté au groupe, ce qui garantit que le développeur dispose des autorisations appropriées pour travailler sur l’application.
Instructions Capture d'écran
Accédez à la page Azure Active Directory dans le Portail Azure en tapant Azure Active Directory dans la zone de recherche en haut de la page, puis en sélectionnant Azure Active Directory sous Services. A screenshot showing how to use the top search bar in the Azure portal to search for and navigate to the Azure Active Directory page.
Dans la page Azure Active Directory, sélectionnez Groupes dans le menu de gauche. A screenshot showing the location of the Groups menu item in the left-hand menu of the Azure Active Directory Default Directory page.
Dans la page Tous les groupes, sélectionnez Nouveau groupe. A screenshot showing the location of the New Group button in the All groups page.
Dans la page Nouveau groupe :
  1. Type de groupeSécurité
  2. Nom du groupe → Nom du groupe de sécurité, généralement créé à partir du nom de l’application. Il est également utile d’inclure une chaîne comme local-dev dans le nom du groupe pour indiquer l’objectif du groupe.
  3. Description du groupe → Description de l’objectif du groupe.
  4. Sélectionnez le lien Aucun membre sélectionné sous Membres pour ajouter des membres au groupe.
A screenshot showing how to fill out the form to create a new Azure Active Directory group for the application. This screenshot also shows the location of the link to select to add members to this group.
Dans la boîte de dialogue Ajouter des membres :
  1. Utilisez la zone de recherche pour filtrer la liste des noms principaux dans la liste.
  2. Sélectionnez les principaux de service d’application pour le développement local pour cette application. À mesure que les objets sont sélectionnés, ils sont grisés et déplacés vers la liste Éléments sélectionnés en bas de la boîte de dialogue.
  3. Lorsque vous avez terminé, sélectionnez le bouton Sélectionner .
A screenshot of the Add members dialog box showing how to select application service principals to be included in the group.
Sur la page Nouveau groupe, sélectionnez Créer pour créer le groupe.

Le groupe sera créé et vous serez redirigé vers la page Tous les groupes. L’affichage du groupe peut prendre jusqu’à 30 secondes et vous devrez peut-être actualiser la page en raison de la mise en cache dans le Portail Azure.
A screenshot of the New Group page showing how to complete the process by selecting the Create button.

3 - Attribuer des rôles à l’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. Dans cet exemple, les rôles seront attribués au groupe Azure Active Directory créé à l’étape 2. 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 à 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.
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
Dans la page du groupe de ressources, sélectionnez Contrôle d’accès (IAM) dans le menu de gauche. A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
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.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
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.
A screenshot showing how to filter and select role assignments to be added to the resource group.
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.
A screenshot showing the radio button to select to assign a role to an Azure AD group and the link used to select the group to assign the role to.
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 dans votre abonnement. Si nécessaire, tapez les premiers caractères du groupe Azure AD de développement local que vous avez créé pour l’application.
  2. Sélectionnez le groupe Azure AD de développement local associé à votre application.
Sélectionnez Sélectionner en bas de la boîte de dialogue pour continuer.
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
Le groupe Azure AD 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.
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

4 - Définir des variables d’environnement d’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, vous devez configurer 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.

Lorsque vous travaillez localement avec Visual Studio, les variables d’environnement peuvent être définies dans le launchsettings.json fichier du Properties dossier de votre projet. Lorsque l’application démarre, ces valeurs sont automatiquement extraites. Gardez à l’esprit que ces configurations ne transitent pas avec votre application quand elle est déployée. Vous devez donc toujours configurer des variables d’environnement sur votre environnement d’hébergement cible.

"profiles": {
    "SampleProject": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:7177;http://localhost:5177",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID":"11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID": "11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    }
  }

5 - Implémenter DefaultAzureCredential dans votre application

DefaultAzureCredential prend en charge plusieurs méthodes d’authentification et détermine la méthode d’authentification utilisée au moment de l’exécution. De cette façon, votre application peut utiliser différentes méthodes d’authentification dans différents environnements sans implémenter de code spécifique à l’environnement.

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

Pour implémenter DefaultAzureCredential, ajoutez d’abord les packages Azure.Identity et éventuellement Microsoft.Extensions.Azure à votre application. Pour ce faire, utilisez la ligne de commande ou le Gestionnaire de package NuGet.

Ouvrez un environnement de terminal de votre choix dans le répertoire du projet d’application et entrez la commande ci-dessous.

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

Les services Azure sont généralement accessibles à l’aide des classes clientes correspondantes à partir du SDK. Ces classes et vos propres services personnalisés doivent être inscrits dans le fichier Program.cs afin qu’ils soient accessibles via l’injection de dépendances dans votre application. À l’intérieur de Program.cs, suivez les étapes ci-dessous pour configurer correctement votre service et DefaultAzureCredential.

  1. Incluez les espaces de noms Azure.Identity et Microsoft.Extensions.Azure avec une instruction using.
  2. Inscrivez le service Azure à l’aide des méthodes d’assistance appropriées.
  3. Passez une instance de l’objet DefaultAzureCredential à la méthode UseCredential.

Un exemple de cela est illustré dans le segment de code suivant.

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

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

Vous pouvez également utiliser plus directement DefaultAzureCredential dans vos services sans l’aide de méthodes d’inscription Azure supplémentaires, comme indiqué ci-dessous.

using Azure.Identity;

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

Lorsque le code ci-dessus est exécuté sur votre station de travail locale pendant le développement local, il recherche dans les variables d’environnement un principal de service d’application ou dans Visual Studio, VS Code, Azure CLI ou Azure PowerShell un ensemble d’informations d’identification de développeur, qui peuvent être utilisées pour authentifier l’application auprès des ressources Azure pendant le développement local.

Lorsqu’il est déployé 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.