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

Azure B2C自定义策略下Web App调用API时[AuthorizeForScopes]跳转问题咨询

问题解决方法

根因说明

[AuthorizeForScopes]属性默认未指定适配Azure B2C的身份验证方案,触发挑战时会优先调用通用Azure AD的登录逻辑,不会自动携带你配置的自定义策略参数,因此会跳转到错误的登录页。

具体修复步骤

  1. 确认配置文件参数完整

    确保你appsettings.json中的AzureAdB2C节点包含自定义策略ID配置,示例如下:
    "AzureAdB2C": {
      "Instance": "https://<你的租户名>.b2clogin.com",
      "Domain": "<你的租户名>.onmicrosoft.com",
      "ClientId": "<Web应用的客户端ID>",
      "SignUpSignInPolicyId": "B2C_1_<你的自定义策略ID>",
      "CallbackPath": "/signin-oidc",
      "ApiScope": "<你要调用的Web API的作用域地址>"
    }
    
  2. 修正[AuthorizeForScopes]属性参数

    给属性显式指定作用域和身份验证方案,确保触发挑战时使用B2C的OpenIdConnect流:
    [AuthorizeForScopes(Scopes = new[] { "你的ApiScope配置值" }, AuthenticationScheme = OpenIdConnectDefaults.AuthenticationScheme)]
    public class PetsController : Controller
    
  3. 补充Web App认证配置的事件处理

    如果修改属性后问题仍存在,在AddMicrosoftIdentityWebApp的配置逻辑中添加挑战地址修正逻辑,强制跳转时使用自定义策略:
    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        Configuration.Bind("AzureAdB2C", options);
        // 新增挑战事件处理
        options.Events ??= new OpenIdConnectEvents();
        options.Events.OnRedirectToIdentityProvider = context =>
        {
            // 替换通用端点为自定义策略对应的B2C端点
            var policy = Configuration["AzureAdB2C:SignUpSignInPolicyId"];
            context.ProtocolMessage.IssuerAddress = context.ProtocolMessage.IssuerAddress.Replace("common", policy);
            return Task.CompletedTask;
        };
    })
    .EnableTokenAcquisitionToCallDownstreamApi(new string[] { Configuration["ApiScope"] })
    .AddInMemoryTokenCaches();
    
  4. 可选:升级依赖包版本

    低版本的Microsoft.Identity.Web包存在B2C场景下的已知跳转问题,建议升级到最新稳定版即可规避。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:18:02