You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Microsoft.Identity.Web使用托管身份断言凭据替代客户端密钥?

配置Microsoft.Identity.Web使用无密钥身份验证(基于托管标识)

1. 代码直接配置托管标识凭据

你可以在注册Microsoft.Identity.Web服务时,直接指定使用ManagedIdentityCredential,无需配置客户端密钥或证书:

builder.Services.AddMicrosoftIdentityWebApp(builder.Configuration)
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches()
    .AddClientCredentials(new[] { "api://你的下游API范围/.default" }, options =>
    {
        // 传入你的托管标识客户端ID
        options.Credential = new ManagedIdentityCredential(managedIdentityClientId: "你的托管标识ClientID");
    });

这种方式直接绕过传统客户端凭据配置,让包直接使用托管标识获取访问令牌。

2. 配置文件驱动的无密钥配置

如果偏好通过配置文件管理,可在appsettings.json中添加ClientCredentials节点,指定凭据类型为ManagedIdentity:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "TenantId": "你的租户ID",
  "ClientId": "你的Web应用ClientID",
  "ClientCredentials": [
    {
      "Type": "ManagedIdentity",
      "ManagedIdentityClientId": "你的托管标识ClientID"
    }
  ]
}

然后代码中只需常规注册:

builder.Services.AddMicrosoftIdentityWebApp(builder.Configuration)
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches()
    .AddClientCredentials();

Microsoft.Identity.Web会自动根据配置中的Type创建对应的凭据实例。如果是Azure Kubernetes工作负载身份联合,只需将Type改为WorkloadIdentity,并确保集群已配置好工作负载身份相关环境变量(如AZURE_CLIENT_ID、AZURE_TENANT_ID)。

3. 关于ClientAssertionCredential的替代方案

如果确实需要使用ClientAssertionCredential,可以通过托管标识获取断言令牌后构建实例,但这种方式没必要——ManagedIdentityCredential已经封装了所有令牌获取逻辑,直接使用更简洁。如果一定要实现,示例代码如下:

var tenantId = "你的租户ID";
var managedIdentityClientId = "你的托管标识ClientID";
var appClientId = "你的Web应用ClientID";

var managedIdentityCredential = new ManagedIdentityCredential(managedIdentityClientId);
// 获取用于客户端断言的令牌,目标受众为微软身份平台令牌端点
var assertionToken = await managedIdentityCredential.GetTokenAsync(
    new TokenRequestContext(new[] { $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token" }));

var clientAssertionCredential = new ClientAssertionCredential(
    tenantId,
    appClientId,
    assertionToken.Token);

// 将构建好的凭据传入Microsoft.Identity.Web
builder.Services.AddMicrosoftIdentityWebApp(builder.Configuration)
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches()
    .AddClientCredentials(new[] { "api://你的下游API范围/.default" }, options =>
    {
        options.Credential = clientAssertionCredential;
    });

内容的提问来源于stack exchange,提问作者Shuzheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:23:08