S’authentifier auprès des ressources Azure à partir d’applications .NET hébergées localement
Article
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 qu’ils puissent être utilisés par le Kit de développement logiciel (SDK) Azure pour .NET 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 spécifiques à l’environnement pour chaque principal de service et de s’assurer qu’une application déployée dans un environnement ne communique pas avec les 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 :
Entrez inscriptions d’applications dans la barre de recherche en haut du Portail Azure.
Sélectionnez l’élément étiqueté Inscriptions d’applications sous le titre Services dans le menu qui apparaît sous la barre de recherche.
Dans la page Inscriptions d’applications, sélectionnez + Nouvelle inscription.
Dans la page Inscription d’une application, remplissez le formulaire comme suit :
Nom → Entrez un nom pour l’inscription de l’application dans Azure. Il est recommandé d’inclure le nom de l’application et l’environnement (test, prod) pour lequel l’inscription de l’application est destinée.
Types de comptes pris en charge → Comptes dans cet annuaire organisationnel uniquement.
Sélectionnez Inscrire pour inscrire votre application et créer le principal du service d’application.
Dans la page Inscription de l’application pour votre application :
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.
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.
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.
Dans la page Certificats et secrets, sélectionnez + Nouvelle clé secrète client.
La boîte de dialogue Ajouter une clé secrète client s’affiche à droite de la page. Dans cette boîte de dialogue :
Description → Entrez la valeur Current.
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.
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.
az ad sp create-for-rbac --name <app-name>
La sortie produite par cette commande est semblable à ce qui suit : Notez ces valeurs ou gardez cette fenêtre ouverte, car vous aurez besoin de ces valeurs à l’étape suivante et ne pourrez plus afficher la valeur de mot de passe (clé secrète client).
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.
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.
Dans la page du groupe de ressources, sélectionnez Contrôle d’accès (IAM) dans le menu de gauche.
Dans la page Contrôle d’accès (IAM) :
Sélectionnez l’onglet Attributions de rôles.
Sélectionnez + Ajouter dans le menu supérieur, puis Ajouter une attribution de rôle dans le menu déroulant résultant.
La page Ajouter une attribution de rôle répertorie tous les rôles qui peuvent être attribués pour le groupe de ressources.
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.
Sélectionnez le rôle que vous voulez attribuer.
Sélectionnez Suivant pour accéder à l’écran suivant.
La page de rôle suivante Ajouter une attribution vous permet de spécifier l’utilisateur auquel attribuer le rôle.
Sélectionnez Utilisateur, groupe ou principal de service sous Attribuer l’accès à.
Sélectionnez + Sélectionner des membres sous Membres
Une boîte de dialogue s’ouvre sur le côté droit du portail Azure.
Dans la boîte de dialogue Sélectionner des membres :
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.
Sélectionnez le principal de service associé à votre application.
Sélectionnez Sélectionner en bas de la boîte de dialogue pour continuer.
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.
Un principal de service se voit attribuer un rôle dans Azure à l’aide de la commande az role assignment create.
az role assignment create --assignee "{appId}" \
--role "{roleName}" \
--resource-group "{resourceGroupName}"
Pour obtenir les noms de rôles auxquels un principal de service peut être affecté, utilisez la commande az role definition list.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Par exemple, pour autoriser le principal de service avec l’appId d’accès 00000000-0000-0000-0000-000000000000 en lecture, écriture et suppression aux conteneurs d’objets blob et aux données de Stockage Azure à tous les comptes de stockage dans le groupe de ressources msdocs-dotnet-sdk-auth-example, vous devez affecter le principal du service d’application au rôle Contributeur aux données blob du stockage à l’aide de la commande suivante.
az role assignment create --assignee "00000000-0000-0000-0000-000000000000" \
--role "Storage Blob Data Contributor" \
--resource-group "msdocs-dotnet-sdk-auth-example"
Pour plus d’informations sur l’attribution d’autorisations au niveau de la ressource ou de l’abonnement à l’aide d’Azure CLI, consultez l’article Attribuer des rôles Azure à l’aide d’Azure CLI.
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, 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.
Si votre application est hébergée dans IIS, il est recommandé 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.
Vous pouvez définir des variables d’environnement pour Windows à partir de la ligne de commande. Toutefois, quand vous utilisez cette approche, les valeurs sont accessibles à toutes les applications s’exécutant sur ce système d’exploitation. Cela peut entraîner des conflits si vous n’êtes pas prudent. Les variables d’environnement peuvent être définies au niveau de l’utilisateur ou du système :
# Set user environment variables
setx ASPNETCORE_ENVIRONMENT "Development"
setx AZURE_CLIENT_ID "00000000-0000-0000-0000-000000000000"
setx AZURE_TENANT_ID "11111111-1111-1111-1111-111111111111"
setx AZURE_CLIENT_SECRET "=abcdefghijklmnopqrstuvwxyz"
# Set system environment variables - requires running as admin
setx ASPNETCORE_ENVIRONMENT "Development"
setx AZURE_CLIENT_ID "00000000-0000-0000-0000-000000000000" /m
setx AZURE_TENANT_ID "11111111-1111-1111-1111-111111111111" /m
setx AZURE_CLIENT_SECRET "=abcdefghijklmnopqrstuvwxyz" /m
Vous pouvez également utiliser PowerShell pour définir des variables d’environnement au niveau de l’utilisateur ou de l’ordinateur.
# Set user environment variables
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "User")
[Environment]::SetEnvironmentVariable("AZURE_CLIENT_ID", "00000000-0000-0000-0000-000000000000", "User")
[Environment]::SetEnvironmentVariable("AZURE_TENANT_ID", "11111111-1111-1111-1111-111111111111", "User")
[Environment]::SetEnvironmentVariable("AZURE_CLIENT_SECRET", "=abcdefghijklmnopqrstuvwxyz", "User")
# Set system environment variables - requires running as admin
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine")
[Environment]::SetEnvironmentVariable("AZURE_CLIENT_ID", "00000000-0000-0000-0000-000000000000", "Machine")
[Environment]::SetEnvironmentVariable("AZURE_TENANT_ID", "11111111-1111-1111-1111-111111111111", "Machine")
[Environment]::SetEnvironmentVariable("AZURE_CLIENT_SECRET", "=abcdefghijklmnopqrstuvwxyz", "Machine")
4 - Implémenter DefaultAzureCredential dans l’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.
Cliquez avec le bouton droit sur le nœud de votre projet dans Visual Studio, puis sélectionnez Gérer les packages NuGet. Recherchez Azure.Identity dans le champ de recherche, puis installez le package correspondant. Répétez également ce processus pour le 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.
Incluez les espaces de noms Azure.Identity et Microsoft.Extensions.Azure avec une instruction using.
Inscrivez le service Azure à l’aide des méthodes d’assistance appropriées.
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.
Collaborer avec nous sur GitHub
La source de ce contenu se trouve sur GitHub, où vous pouvez également créer et examiner les problèmes et les demandes de tirage. Pour plus d’informations, consultez notre guide du contributeur.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez https://aka.ms/ContentUserFeedback.