Azure AD自定义OpenIdConnectEvents触发MsalUiRequiredException异常咨询
问题原因
该现象不属于已知Bug,是配置逻辑错误导致。
调用AddMicrosoftIdentityWebApp()方法时,Microsoft.Identity.Web库会自动为OpenIdConnectOptions注入默认的事件处理逻辑,包含增量同意挑战响应、令牌缓存同步、身份验证流程校验等必要逻辑。你直接通过new OpenIdConnectEvents赋值给options.Events的写法,直接覆盖了所有默认事件实现,导致MsalUiRequiredException对应的挑战流程无法正常触发,最终抛出IDW10502错误。
正确配置方式
不要直接替换整个Events对象,仅追加你需要的自定义逻辑,保留原有默认实现即可:
services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options => { // 保留原有已注册的事件委托 var existingOnRedirectToIdentityProvider = options.Events.OnRedirectToIdentityProvider; options.Events.OnRedirectToIdentityProvider = async context => { // 执行自定义的转发头适配逻辑 if (context.Request.Headers.ContainsKey("X-Forwarded-Host")) { context.ProtocolMessage.RedirectUri = "https://" + context.Request.Headers["X-Forwarded-Host"] + Configuration.GetSection("AzureAd").GetValue<String>("CallbackPath"); } // 调用原有默认事件逻辑,不可省略 await existingOnRedirectToIdentityProvider(context); }; });
补充建议
如果是为了适配反向代理/网关的转发场景,更推荐直接配置官方的ForwardedHeaders中间件,Microsoft.Identity.Web原生支持识别转发后的请求上下文,不需要手动修改RedirectUri。
内容的提问来源于stack exchange,提问作者warrior
相关产品推荐
相关产品推荐

