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

在ASP.NET Core中用Microsoft.Identity.Web实现多Bearer认证方案

多认证方案下同时验证Azure AD与Azure AD B2C Bearer令牌的解决方案

要实现同时验证来自Azure AD(跨租户)和Azure AD B2C的Bearer令牌,你需要为两种认证场景配置独立的认证方案,并通过自定义授权策略让系统尝试用多个方案验证令牌,具体步骤如下:

1. 配置独立的认证方案名称

为Azure AD和Azure AD B2C分别指定唯一的Scheme名称(比如AADBearer和B2CBearer),避免Scheme名称冲突导致的异常。

2. 注册两个Microsoft Identity Web Api认证方案

在服务配置中,两次调用AddMicrosoftIdentityWebApi,分别绑定对应的配置项,并指定各自的Scheme名称:

// 配置Azure AD认证方案
builder.Services.AddAuthentication()
    .AddMicrosoftIdentityWebApi(options =>
    {
        // 绑定Azure AD配置(来自appsettings.json)
        builder.Configuration.Bind("AzureAd", options);
        // 可选:自定义令牌验证参数,比如声明映射
        options.TokenValidationParameters.NameClaimType = "name";
    }, schemeOptions =>
    {
        // 指定Azure AD对应的Scheme名称
        schemeOptions.SchemeName = "AADBearer";
    })
    // 配置Azure AD B2C认证方案
    .AddMicrosoftIdentityWebApi(options =>
    {
        // 绑定Azure AD B2C配置(来自appsettings.json)
        builder.Configuration.Bind("AzureAdB2C", options);
        options.TokenValidationParameters.NameClaimType = "name";
    }, schemeOptions =>
    {
        // 指定Azure AD B2C对应的Scheme名称
        schemeOptions.SchemeName = "B2CBearer";
    });

3. 配置授权策略,允许多方案验证

创建默认授权策略,让系统尝试用两个Scheme中的任意一个验证令牌,只要其中一个验证通过即视为认证成功:

builder.Services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        // 添加两个认证Scheme,系统会依次尝试验证
        .AddAuthenticationSchemes("AADBearer", "B2CBearer")
        .Build();
});

4. 确保中间件顺序正确

在管道配置中,确保UseAuthentication和UseAuthorization的顺序正确:

app.UseAuthentication();
app.UseAuthorization();

配置文件示例(appsettings.json)

确保配置文件中包含Azure AD和Azure AD B2C的独立配置项:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "your-aad-tenant-id",
    "ClientId": "your-aad-api-client-id",
    "Audience": "your-aad-api-audience"
  },
  "AzureAdB2C": {
    "Instance": "https://your-b2c-domain.b2clogin.com/",
    "Domain": "your-b2c-domain.onmicrosoft.com",
    "ClientId": "your-b2c-api-client-id",
    "SignUpSignInPolicyId": "B2C_1_signup_signin",
    "Audience": "your-b2c-api-audience"
  }
}

问题原因说明

  • 重复使用Bearer Scheme会触发异常,因为每个认证方案必须拥有唯一的名称。
  • 仅Bearer2生效是因为默认授权策略只验证了单个Scheme,未配置多方案尝试逻辑,通过自定义授权策略即可解决此问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:12:48