适用于 ASP.NET Core 的 Azure 客户端库集成 (Microsoft.Extensions.Azure) 支持从 Azure.Core.TokenCredential 和其他配置文件中定义的键值对创建不同的 类型。 凭据对应于 Azure 标识客户端库中 凭据类 的子集。 本文介绍了对不同 TokenCredential 类型的支持,以及如何为每个类型配置所需的键值对。
通过配置支持 Azure 凭据
Microsoft.Extensions.Azure 能够自动为 Azure 服务客户端提供 TokenCredential 类,方法是使用 .NET 的一种 抽象机制,搜索 IConfiguration 或其他配置文件,以找到凭据值。 此方法允许开发人员通过配置(而不是直接通过应用代码)在不同的环境中显式设置凭据值。
可以通过配置创建以下凭据:
- AzurePipelinesCredential
- 客户端证书凭证
- ClientSecretCredential
- DefaultAzureCredential
- ManagedIdentityCredential
- WorkloadIdentityCredential
配置 Azure 凭据
使用 AddAzureClients 方法注册的 Azure 服务客户端会自动配置有 DefaultAzureCredential 的实例(如果未通过 WithCredential 扩展方法提供显式凭据)。 注册客户端以创建特定凭据时,还可以使用配置文件中的凭据值替代全局 DefaultAzureCredential 凭据:
builder.Services.AddAzureClients(clientBuilder =>
{
// Register BlobServiceClient using credential from appsettings.json
clientBuilder.AddBlobServiceClient(builder.Configuration.GetSection("Storage"));
// Register ServiceBusClient using the fallback DefaultAzureCredential
clientBuilder.AddServiceBusClientWithNamespace(
"<your_namespace>.servicebus.windows.net");
});
关联的 appsettings.json 文件:
"Storage": {
"serviceUri": "<service_uri>",
"credential": "managedidentity",
"clientId": "<client_id>"
}
以下凭据还支持 AdditionallyAllowedTenants 属性,该属性指定了凭据可以获取令牌的默认租户之外的 Microsoft Entra 租户:
- AzurePipelinesCredential
- 客户端证书凭证
- ClientSecretCredential
- DefaultAzureCredential
- WorkloadIdentityCredential
添加通配符值 * 可允许凭据获取登录帐户可以访问的任何 Microsoft Entra 租户的令牌。 如果未指定任何租户 ID,则此选项对该身份验证方法没有影响,并且使用该方法时,凭据将为任何请求的租户获取令牌。
{
"additionallyAllowedTenants": "<tenant_ids_separated_by_semicolon>"
}
创建 ManagedIdentityCredential 实例
可以通过以下方式使用配置值配置凭据以利用托管标识:
- 系统分配的托管标识
- 用户分配的管理标识
- 作为联合标识凭据的托管标识
若要创建一个实例 Azure.Identity.ManagedIdentityCredential,请将以下键值对添加到 appsettings.json 文件中。
系统分配的托管标识
{
"credential": "managedidentity"
}
用户分配的管理标识
用户分配的托管标识可以通过提供客户端 ID、资源 ID 或对象 ID 来使用。
{
"credential": "managedidentity",
"managedIdentityClientId": "<managed_identity_client_id>"
}
作为联合标识凭据的托管标识
在 1.12.0 及更高版本中,支持Microsoft.Extensions.Azure功能。 此功能不适用于系统分配的托管标识。 可以通过提供客户端 ID、资源 ID 或对象 ID,使用用户分配的托管标识来配置凭据。
{
"credential": "managedidentityasfederatedidentity",
"azureCloud": "<azure_cloud>",
"tenantId": "<tenant_id>",
"clientId": "<client_id>",
"managedIdentityClientId": "<managed_identity_client_id>"
}
密钥 azureCloud 值用于设置 Microsoft Entra 访问令牌范围。 可以为下列值之一:
-
public适用于 Azure 公有云 -
usgov适用于 Azure 美国政府云 -
china(适用于由世纪互联运营的 Azure)
创建 AzurePipelinesCredential 实例
若要创建一个实例 Azure.Identity.AzurePipelinesCredential,请将以下键值对添加到 appsettings.json 文件中:
{
"credential": "azurepipelines",
"clientId": "<client_id>",
"tenantId": "<tenant_id>",
"serviceConnectionId": "<service_connection_id>",
"systemAccessToken": "<system_access_token>"
}
重要
AzurePipelinesCredential 在 Microsoft.Extensions.Azure 版本 1.11.0 及更高版本中受支持。
创建 WorkloadIdentityCredential 实例
若要创建一个实例 Azure.Identity.WorkloadIdentityCredential,请将以下键值对添加到 appsettings.json 文件中:
{
"credential": "workloadidentity",
"tenantId": "<tenant_id>",
"clientId": "<client_id>",
"tokenFilePath": "<token_file_path>"
}
创建 ClientSecretCredential 实例
若要创建一个实例 Azure.Identity.ClientSecretCredential,请将以下键值对添加到 appsettings.json 文件中:
{
"tenantId": "<tenant_id>",
"clientId": "<client_id>",
"clientSecret": "<client_secret>"
}
创建 ClientCertificateCredential 实例
若要创建一个实例 Azure.Identity.ClientCertificateCredential,请将以下键值对添加到 appsettings.json 文件中:
{
"tenantId": "<tenant_id>",
"clientId": "<client_id>",
"clientCertificate": "<client_certificate>",
"clientCertificateStoreLocation": "<client_certificate_store_location>"
}
注意
密钥 clientCertificateStoreLocation 是可选的。 如果键:
- 如果存在并且它的值为空,则将被忽略。
- 不存在,将使用
CurrentUser枚举中的默认 X509Credentials.StoreLocation。
创建 DefaultAzureCredential 实例
若要创建一个实例 Azure.Identity.DefaultAzureCredential,请将以下键值对添加到 appsettings.json 文件中:
{
"tenantId": "<tenant_id>",
"clientId": "<client_id>",
"managedIdentityResourceId": "<managed_identity_resource_id>"
}