azure-identity-dotnet

npx skills add https://github.com/microsoft/skills --skill azure-identity-dotnet

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

Skills similaires