Bibliothèque Azure Identity pour .NET
Bibliothèque d'authentification pour les clients Azure SDK utilisant Microsoft Entra ID.
Installation
dotnet add package Azure.Identity
# Pour l'intégration ASP.NET Core
dotnet add package Microsoft.Extensions.Azure
# Pour l'authentification par broker et le support des credentials Visual Studio Code
dotnet add package Azure.Identity.Broker
Variables d'environnement
Service Principal avec secret
AZURE_CLIENT_ID=<application-client-id>
AZURE_TENANT_ID=<directory-tenant-id>
AZURE_CLIENT_SECRET=<client-secret-value>
Service Principal avec certificat
AZURE_CLIENT_ID=<application-client-id>
AZURE_TENANT_ID=<directory-tenant-id>
AZURE_CLIENT_CERTIFICATE_PATH=<path-to-pfx-or-pem>
AZURE_CLIENT_CERTIFICATE_PASSWORD=<certificate-password> # Optionnel
Managed Identity
AZURE_CLIENT_ID=<user-assigned-managed-identity-client-id> # Uniquement pour les identités assignées par l'utilisateur
DefaultAzureCredential
Credential recommandée pour la plupart des scénarios. Essaie plusieurs méthodes d'authentification dans l'ordre. Consultez Vue d'ensemble de DefaultAzureCredential pour connaître l'ordre actuel de la chaîne de credentials et les paramètres par défaut.
Utilisation basique
using Azure.Identity;
using Azure.Storage.Blobs;
var credential = new DefaultAzureCredential();
var blobClient = new BlobServiceClient(
new Uri("https://myaccount.blob.core.windows.net"),
credential);
ASP.NET Core avec injection de dépendances
using Azure.Identity;
using Microsoft.Extensions.Azure;
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://myaccount.blob.core.windows.net"));
clientBuilder.AddSecretClient(
new Uri("https://myvault.vault.azure.net"));
// Utilise DefaultAzureCredential par défaut
clientBuilder.UseCredential(new DefaultAzureCredential());
});
Personnalisation de DefaultAzureCredential
var credential = new DefaultAzureCredential(
new DefaultAzureCredentialOptions
{
ExcludeEnvironmentCredential = true,
ExcludeManagedIdentityCredential = false,
ExcludeVisualStudioCredential = false,
ExcludeAzureCliCredential = false,
ExcludeInteractiveBrowserCredential = false, // Activer l'authentification interactive
TenantId = "<tenant-id>",
ManagedIdentityClientId = "<user-assigned-mi-client-id>"
});
Types de credentials
ManagedIdentityCredential (Production)
// Managed identity assignée par le système
var credential = new ManagedIdentityCredential(ManagedIdentityId.SystemAssigned);
// Assignée par l'utilisateur via l'ID client
var credential = new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedClientId("<client-id>"));
// Assignée par l'utilisateur via l'ID de ressource
var credential = new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedResourceId("<resource-id>"));
// Assignée par l'utilisateur via l'ID d'objet
var credential = new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedObjectId("<object-id>"));
ClientSecretCredential
var credential = new ClientSecretCredential(
tenantId: "<tenant-id>",
clientId: "<client-id>",
clientSecret: "<client-secret>");
var client = new SecretClient(
new Uri("https://myvault.vault.azure.net"),
credential);
ClientCertificateCredential
var certificate = X509CertificateLoader.LoadCertificateFromFile("MyCertificate.pfx");
var credential = new ClientCertificateCredential(
tenantId: "<tenant-id>",
clientId: "<client-id>",
certificate);
ChainedTokenCredential (Chaîne personnalisée)
var credential = new ChainedTokenCredential(
new ManagedIdentityCredential(),
new AzureCliCredential());
var client = new SecretClient(
new Uri("https://myvault.vault.azure.net"),
credential);
Credentials pour développeurs
// Azure CLI
var credential = new AzureCliCredential();
// Azure PowerShell
var credential = new AzurePowerShellCredential();
// Azure Developer CLI (azd)
var credential = new AzureDeveloperCliCredential();
// Visual Studio
var credential = new VisualStudioCredential();
// Navigateur interactif
var credential = new InteractiveBrowserCredential();
Configuration basée sur l'environnement
// Production vs Développement
TokenCredential credential = builder.Environment.IsProduction()
? new ManagedIdentityCredential("<client-id>")
: new DefaultAzureCredential();
Clouds souverains
var credential = new DefaultAzureCredential(
new DefaultAzureCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzureGovernment
});
// Autorités disponibles :
// AzureAuthorityHosts.AzurePublicCloud (par défaut)
// AzureAuthorityHosts.AzureGovernment
// AzureAuthorityHosts.AzureChina
Référence des types de credentials
| Catégorie | Credential | Objectif |
|---|---|---|
| Chaînes | DefaultAzureCredential |
Chaîne préconfigurée pour dev-to-prod |
ChainedTokenCredential |
Chaîne de credentials personnalisée | |
| Hébergé sur Azure | ManagedIdentityCredential |
Managed identity Azure |
WorkloadIdentityCredential |
Workload identity Kubernetes | |
EnvironmentCredential |
Variables d'environnement | |
| Service Principal | ClientSecretCredential |
ID client + secret |
ClientCertificateCredential |
ID client + certificat | |
ClientAssertionCredential |
Assertion client signée | |
| Utilisateur | InteractiveBrowserCredential |
Authentification par navigateur |
DeviceCodeCredential |
Flux de code d'appareil | |
OnBehalfOfCredential |
Identité déléguée | |
| Développeur | AzureCliCredential |
Azure CLI |
AzurePowerShellCredential |
Azure PowerShell | |
AzureDeveloperCliCredential |
Azure Developer CLI | |
VisualStudioCredential |
Visual Studio |
Bonnes pratiques
1. Utiliser des credentials déterministes en production
// Développement
var devCredential = new DefaultAzureCredential();
// Production - utiliser une credential spécifique
var prodCredential = new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedClientId("<client-id>"));
2. Réutiliser les instances de credentials
// Bon : Une seule instance de credential partagée entre les clients
var credential = new DefaultAzureCredential();
var blobClient = new BlobServiceClient(blobUri, credential);
var secretClient = new SecretClient(vaultUri, credential);
3. Configurer les politiques de retry
var options = new ManagedIdentityCredentialOptions(
ManagedIdentityId.FromUserAssignedClientId(clientId))
{
Retry =
{
MaxRetries = 3,
Delay = TimeSpan.FromSeconds(0.5),
}
};
var credential = new ManagedIdentityCredential(options);
4. Activer la journalisation pour le débogage
using Azure.Core.Diagnostics;
using AzureEventSourceListener listener = new((args, message) =>
{
if (args is { EventSource.Name: "Azure-Identity" })
{
Console.WriteLine(message);
}
}, EventLevel.LogAlways);
Gestion des erreurs
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
var client = new SecretClient(
new Uri("https://myvault.vault.azure.net"),
new DefaultAzureCredential());
try
{
KeyVaultSecret secret = await client.GetSecretAsync("secret1");
}
catch (AuthenticationFailedException e)
{
Console.WriteLine($"Authentication Failed: {e.Message}");
}
catch (CredentialUnavailableException e)
{
Console.WriteLine($"Credential Unavailable: {e.Message}");
}
Exceptions clés
| Exception | Description |
|---|---|
AuthenticationFailedException |
Exception de base pour les erreurs d'authentification |
CredentialUnavailableException |
Credential ne peut pas s'authentifier dans l'environnement actuel |
AuthenticationRequiredException |
Une authentification interactive est requise |
Support des Managed Identities
Services Azure supportés :
- Azure App Service et Azure Functions
- Azure Arc
- Azure Cloud Shell
- Azure Kubernetes Service (AKS)
- Azure Service Fabric
- Azure Virtual Machines
- Azure Virtual Machine Scale Sets
Sécurité des threads
Toutes les implémentations de credentials sont thread-safe. Une seule instance de credential peut être partagée en toute sécurité entre plusieurs clients et threads.
Packages associés
| Package | Objectif | Installation |
|---|---|---|
Azure.Identity |
Authentification (cette bibliothèque) | dotnet add package Azure.Identity |
Microsoft.Extensions.Azure |
Intégration DI | dotnet add package Microsoft.Extensions.Azure |
Azure.Identity.Broker |
Authentification par broker | dotnet add package Azure.Identity.Broker |
Liens de référence
| Ressource | URL |
|---|---|
| Package NuGet | https://www.nuget.org/packages/Azure.Identity |
| Référence API | https://learn.microsoft.com/dotnet/api/azure.identity |
| Chaînes de credentials | https://aka.ms/azsdk/net/identity/credential-chains |
| Bonnes pratiques | https://learn.microsoft.com/dotnet/azure/sdk/authentication/best-practices |
| Source GitHub | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/identity/Azure.Identity |