|
Add this skill
npx mdskills install sickn33/azure-identity-dotnetComprehensive reference documentation for Azure authentication, but lacks agent-specific instructions or triggers
1---2name: azure-identity-dotnet3description: |4 Azure Identity SDK for .NET. Authentication library for Azure SDK clients using Microsoft Entra ID. Use for DefaultAzureCredential, managed identity, service principals, and developer credentials. Triggers: "Azure Identity", "DefaultAzureCredential", "ManagedIdentityCredential", "ClientSecretCredential", "authentication .NET", "Azure auth", "credential chain".5package: Azure.Identity6---78# Azure.Identity (.NET)910Authentication library for Azure SDK clients using Microsoft Entra ID (formerly Azure AD).1112## Installation1314```bash15dotnet add package Azure.Identity1617# For ASP.NET Core18dotnet add package Microsoft.Extensions.Azure1920# For brokered authentication (Windows)21dotnet add package Azure.Identity.Broker22```2324**Current Versions**: Stable v1.17.1, Preview v1.18.0-beta.22526## Environment Variables2728### Service Principal with Secret29```bash30AZURE_CLIENT_ID=<application-client-id>31AZURE_TENANT_ID=<directory-tenant-id>32AZURE_CLIENT_SECRET=<client-secret-value>33```3435### Service Principal with Certificate36```bash37AZURE_CLIENT_ID=<application-client-id>38AZURE_TENANT_ID=<directory-tenant-id>39AZURE_CLIENT_CERTIFICATE_PATH=<path-to-pfx-or-pem>40AZURE_CLIENT_CERTIFICATE_PASSWORD=<certificate-password> # Optional41```4243### Managed Identity44```bash45AZURE_CLIENT_ID=<user-assigned-managed-identity-client-id> # Only for user-assigned46```4748## DefaultAzureCredential4950The recommended credential for most scenarios. Tries multiple authentication methods in order:5152| Order | Credential | Enabled by Default |53|-------|------------|-------------------|54| 1 | EnvironmentCredential | Yes |55| 2 | WorkloadIdentityCredential | Yes |56| 3 | ManagedIdentityCredential | Yes |57| 4 | VisualStudioCredential | Yes |58| 5 | VisualStudioCodeCredential | Yes |59| 6 | AzureCliCredential | Yes |60| 7 | AzurePowerShellCredential | Yes |61| 8 | AzureDeveloperCliCredential | Yes |62| 9 | InteractiveBrowserCredential | **No** |6364### Basic Usage6566```csharp67using Azure.Identity;68using Azure.Storage.Blobs;6970var credential = new DefaultAzureCredential();71var blobClient = new BlobServiceClient(72 new Uri("https://myaccount.blob.core.windows.net"),73 credential);74```7576### ASP.NET Core with Dependency Injection7778```csharp79using Azure.Identity;80using Microsoft.Extensions.Azure;8182builder.Services.AddAzureClients(clientBuilder =>83{84 clientBuilder.AddBlobServiceClient(85 new Uri("https://myaccount.blob.core.windows.net"));86 clientBuilder.AddSecretClient(87 new Uri("https://myvault.vault.azure.net"));8889 // Uses DefaultAzureCredential by default90 clientBuilder.UseCredential(new DefaultAzureCredential());91});92```9394### Customizing DefaultAzureCredential9596```csharp97var credential = new DefaultAzureCredential(98 new DefaultAzureCredentialOptions99 {100 ExcludeEnvironmentCredential = true,101 ExcludeManagedIdentityCredential = false,102 ExcludeVisualStudioCredential = false,103 ExcludeAzureCliCredential = false,104 ExcludeInteractiveBrowserCredential = false, // Enable interactive105 TenantId = "<tenant-id>",106 ManagedIdentityClientId = "<user-assigned-mi-client-id>"107 });108```109110## Credential Types111112### ManagedIdentityCredential (Production)113114```csharp115// System-assigned managed identity116var credential = new ManagedIdentityCredential(ManagedIdentityId.SystemAssigned);117118// User-assigned by client ID119var credential = new ManagedIdentityCredential(120 ManagedIdentityId.FromUserAssignedClientId("<client-id>"));121122// User-assigned by resource ID123var credential = new ManagedIdentityCredential(124 ManagedIdentityId.FromUserAssignedResourceId("<resource-id>"));125```126127### ClientSecretCredential128129```csharp130var credential = new ClientSecretCredential(131 tenantId: "<tenant-id>",132 clientId: "<client-id>",133 clientSecret: "<client-secret>");134135var client = new SecretClient(136 new Uri("https://myvault.vault.azure.net"),137 credential);138```139140### ClientCertificateCredential141142```csharp143var certificate = X509CertificateLoader.LoadCertificateFromFile("MyCertificate.pfx");144var credential = new ClientCertificateCredential(145 tenantId: "<tenant-id>",146 clientId: "<client-id>",147 certificate);148```149150### ChainedTokenCredential (Custom Chain)151152```csharp153var credential = new ChainedTokenCredential(154 new ManagedIdentityCredential(),155 new AzureCliCredential());156157var client = new SecretClient(158 new Uri("https://myvault.vault.azure.net"),159 credential);160```161162### Developer Credentials163164```csharp165// Azure CLI166var credential = new AzureCliCredential();167168// Azure PowerShell169var credential = new AzurePowerShellCredential();170171// Azure Developer CLI (azd)172var credential = new AzureDeveloperCliCredential();173174// Visual Studio175var credential = new VisualStudioCredential();176177// Interactive Browser178var credential = new InteractiveBrowserCredential();179```180181## Environment-Based Configuration182183```csharp184// Production vs Development185TokenCredential credential = builder.Environment.IsProduction()186 ? new ManagedIdentityCredential("<client-id>")187 : new DefaultAzureCredential();188```189190## Sovereign Clouds191192```csharp193var credential = new DefaultAzureCredential(194 new DefaultAzureCredentialOptions195 {196 AuthorityHost = AzureAuthorityHosts.AzureGovernment197 });198199// Available authority hosts:200// AzureAuthorityHosts.AzurePublicCloud (default)201// AzureAuthorityHosts.AzureGovernment202// AzureAuthorityHosts.AzureChina203// AzureAuthorityHosts.AzureGermany204```205206## Credential Types Reference207208| Category | Credential | Purpose |209|----------|------------|---------|210| **Chains** | `DefaultAzureCredential` | Preconfigured chain for dev-to-prod |211| | `ChainedTokenCredential` | Custom credential chain |212| **Azure-Hosted** | `ManagedIdentityCredential` | Azure managed identity |213| | `WorkloadIdentityCredential` | Kubernetes workload identity |214| | `EnvironmentCredential` | Environment variables |215| **Service Principal** | `ClientSecretCredential` | Client ID + secret |216| | `ClientCertificateCredential` | Client ID + certificate |217| | `ClientAssertionCredential` | Signed client assertion |218| **User** | `InteractiveBrowserCredential` | Browser-based auth |219| | `DeviceCodeCredential` | Device code flow |220| | `OnBehalfOfCredential` | Delegated identity |221| **Developer** | `AzureCliCredential` | Azure CLI |222| | `AzurePowerShellCredential` | Azure PowerShell |223| | `AzureDeveloperCliCredential` | Azure Developer CLI |224| | `VisualStudioCredential` | Visual Studio |225226## Best Practices227228### 1. Use Deterministic Credentials in Production229230```csharp231// Development232var devCredential = new DefaultAzureCredential();233234// Production - use specific credential235var prodCredential = new ManagedIdentityCredential("<client-id>");236```237238### 2. Reuse Credential Instances239240```csharp241// Good: Single credential instance shared across clients242var credential = new DefaultAzureCredential();243var blobClient = new BlobServiceClient(blobUri, credential);244var secretClient = new SecretClient(vaultUri, credential);245```246247### 3. Configure Retry Policies248249```csharp250var options = new ManagedIdentityCredentialOptions(251 ManagedIdentityId.FromUserAssignedClientId(clientId))252{253 Retry =254 {255 MaxRetries = 3,256 Delay = TimeSpan.FromSeconds(0.5),257 }258};259var credential = new ManagedIdentityCredential(options);260```261262### 4. Enable Logging for Debugging263264```csharp265using Azure.Core.Diagnostics;266267using AzureEventSourceListener listener = new((args, message) =>268{269 if (args is { EventSource.Name: "Azure-Identity" })270 {271 Console.WriteLine(message);272 }273}, EventLevel.LogAlways);274```275276## Error Handling277278```csharp279using Azure.Identity;280using Azure.Security.KeyVault.Secrets;281282var client = new SecretClient(283 new Uri("https://myvault.vault.azure.net"),284 new DefaultAzureCredential());285286try287{288 KeyVaultSecret secret = await client.GetSecretAsync("secret1");289}290catch (AuthenticationFailedException e)291{292 Console.WriteLine($"Authentication Failed: {e.Message}");293}294catch (CredentialUnavailableException e)295{296 Console.WriteLine($"Credential Unavailable: {e.Message}");297}298```299300## Key Exceptions301302| Exception | Description |303|-----------|-------------|304| `AuthenticationFailedException` | Base exception for authentication errors |305| `CredentialUnavailableException` | Credential cannot authenticate in current environment |306| `AuthenticationRequiredException` | Interactive authentication is required |307308## Managed Identity Support309310Supported Azure services:311- Azure App Service and Azure Functions312- Azure Arc313- Azure Cloud Shell314- Azure Kubernetes Service (AKS)315- Azure Service Fabric316- Azure Virtual Machines317- Azure Virtual Machine Scale Sets318319## Thread Safety320321All credential implementations are thread-safe. A single credential instance can be safely shared across multiple clients and threads.322323## Related SDKs324325| SDK | Purpose | Install |326|-----|---------|---------|327| `Azure.Identity` | Authentication (this SDK) | `dotnet add package Azure.Identity` |328| `Microsoft.Extensions.Azure` | DI integration | `dotnet add package Microsoft.Extensions.Azure` |329| `Azure.Identity.Broker` | Brokered auth (Windows) | `dotnet add package Azure.Identity.Broker` |330331## Reference Links332333| Resource | URL |334|----------|-----|335| NuGet Package | https://www.nuget.org/packages/Azure.Identity |336| API Reference | https://learn.microsoft.com/dotnet/api/azure.identity |337| Credential Chains | https://learn.microsoft.com/dotnet/azure/sdk/authentication/credential-chains |338| Best Practices | https://learn.microsoft.com/dotnet/azure/sdk/authentication/best-practices |339| GitHub Source | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/identity/Azure.Identity |340
Full transparency — inspect the skill content before installing.