Azure B2C自定义策略下Web App调用API时[AuthorizeForScopes]跳转问题咨询
问题解决方法
根因说明
[AuthorizeForScopes]属性默认未指定适配Azure B2C的身份验证方案,触发挑战时会优先调用通用Azure AD的登录逻辑,不会自动携带你配置的自定义策略参数,因此会跳转到错误的登录页。
具体修复步骤
确认配置文件参数完整
确保你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的作用域地址>" }修正
给属性显式指定作用域和身份验证方案,确保触发挑战时使用B2C的OpenIdConnect流:[AuthorizeForScopes]属性参数[AuthorizeForScopes(Scopes = new[] { "你的ApiScope配置值" }, AuthenticationScheme = OpenIdConnectDefaults.AuthenticationScheme)] public class PetsController : Controller补充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();可选:升级依赖包版本
低版本的Microsoft.Identity.Web包存在B2C场景下的已知跳转问题,建议升级到最新稳定版即可规避。
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

