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

如何为Microsoft Identity Web Api绑定Azure AD与AzureADB2C双配置项?

实现多身份认证服务(Azure AD + Azure AD B2C)的配置方案

完全可以绑定两个配置项,通过注册多个身份认证方案分别对应Azure AD和Azure AD B2C服务即可实现需求。以下是具体实现步骤:

1. 配置appsettings.json

在配置文件中添加两个独立的节点,分别对应内网Azure AD和外网Azure AD B2C的参数:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "你的内网租户域名",
    "TenantId": "内网租户ID",
    "ClientId": "内网API客户端ID",
    "Audience": "api://内网API标识"
  },
  "AzureAdB2C": {
    "Instance": "https://你的B2C租户.b2clogin.com/",
    "Domain": "你的B2C租户域名.onmicrosoft.com",
    "TenantId": "B2C租户ID",
    "ClientId": "外网API客户端ID",
    "Audience": "api://外网API标识",
    "SignUpSignInPolicyId": "B2C_1_你的注册登录策略ID"
  }
}

2. 注册多认证方案

在Program.cs(或Startup.cs)中分别注册两个认证方案,每个方案绑定对应的配置项:

builder.Services.AddAuthentication()
    // 注册Azure AD认证方案,指定方案名称为"AzureADScheme"
    .AddMicrosoftIdentityWebApi(options =>
    {
        builder.Configuration.Bind("AzureAd", options);
        options.Events = new JwtBearerEvents();
        options.SaveToken = true;
    }, options => { builder.Configuration.Bind("AzureAd", options); }, "AzureADScheme")

    // 注册Azure AD B2C认证方案,指定方案名称为"AzureADB2CScheme"
    .AddMicrosoftIdentityWebApi(options =>
    {
        builder.Configuration.Bind("AzureAdB2C", options);
        options.Events = new JwtBearerEvents();
        options.SaveToken = true;
    }, options => { builder.Configuration.Bind("AzureAdB2C", options); }, "AzureADB2CScheme");

// 配置授权策略,支持两种认证方案
builder.Services.AddAuthorization(options =>
{
    // 默认策略允许两种方案的认证用户访问
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .AddAuthenticationSchemes("AzureADScheme", "AzureADB2CScheme")
        .Build();

    // 也可以自定义细分策略,比如仅允许Azure AD用户访问的策略
    options.AddPolicy("InternalOnly", policy =>
        policy.AddAuthenticationSchemes("AzureADScheme")
              .RequireAuthenticatedUser());
});

3. 在控制器中指定认证方案

可以在控制器或Action级别指定使用的认证方案:

// 内网接口,仅允许Azure AD认证用户访问
[Authorize(AuthenticationSchemes = "AzureADScheme")]
[ApiController]
[Route("api/internal")]
public class InternalController : ControllerBase
{
    // 接口逻辑
}

// 外网接口,仅允许Azure AD B2C认证用户访问
[Authorize(AuthenticationSchemes = "AzureADB2CScheme")]
[ApiController]
[Route("api/external")]
public class ExternalController : ControllerBase
{
    // 接口逻辑
}

如果需要根据请求自动判断(比如根据域名、路径),可以自定义中间件或授权策略来动态选择认证方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:49:55