Entra ID认证失败后重定向回应用及OnAuthenticationFailed触发时机问询
Entra ID认证错误处理与
OnAuthenticationFailed触发时机问题 需求
当Entra ID认证过程中出现任何错误时,需在新标签页打开自定义错误页面,同时在原标签页保留原始错误信息。
Entra ID认证流程
- 用户在我方登录页时,控制权归我方所有
- 用户点击登录按钮后,被重定向至Entra ID进行认证,此时控制权归Microsoft Entra ID方
- 认证成功后,会重定向至注册应用中配置的重定向URL(我方网站),将控制权及ID令牌一并返回给我方
问题与尝试代码
当认证过程中发生错误(如CA策略限制或其他原因),微软会展示错误页面,导致控制权停滞在此处。是否有办法在微软错误页面出现时将控制权转回我方应用?
我已尝试在.NET Core MVC 6.0中使用OnAuthenticationFailed,代码如下:
builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddMicrosoftIdentityWebApp(options => { builder.Configuration.Bind("AzureAd", options); options.Events = new OpenIdConnectEvents { OnAuthenticationFailed = context => { // Redirect to a custom error page on authentication failure context.Response.Redirect("/Home/Error"); context.HandleResponse(); return Task.CompletedTask; } }; });
想了解OnAuthenticationFailed具体何时触发?
解答
一、OnAuthenticationFailed的触发时机
OnAuthenticationFailed是OpenID Connect中间件的事件,仅当微软Entra ID将认证错误信息返回给我方应用的重定向URL时才会触发——也就是说,只有当Entra ID完成错误处理并将用户重定向回我方配置的回调地址时,这个事件才会被执行。
如果认证错误发生在Entra ID自身的流程中(比如CA策略限制导致直接在微软页面显示错误),此时Entra ID不会将用户重定向回我方应用,OnAuthenticationFailed自然不会触发,这就是你遇到的控制权停滞的原因。
二、解决控制权转回我方的方案
要让Entra ID在认证出错时将用户引导回我方应用,需要在Entra ID的应用注册中配置错误URL:
- 登录Azure门户,找到你的Entra ID注册应用
- 在「认证」页面的「高级设置」中,设置「错误URL」为我方网站的错误处理页面地址
- 保存配置后,当Entra ID流程中出现错误时,会将用户重定向到这个错误URL,此时我方应用就能接管控制权
三、实现新标签页打开自定义错误页的思路
由于Entra ID的重定向是在当前标签页进行的,要实现原标签页保留微软错误信息、新标签页打开自定义页,需要:
- 当我方错误页面接收到Entra ID传递的错误参数后,通过前端JavaScript代码(如
window.open("/Home/CustomError", "_blank"))打开新标签页展示自定义错误 - 原标签页可以选择保留微软错误内容,或者跳转到我方的说明页面
内容的提问来源于stack exchange,提问作者Abhishek Raj
相关产品推荐
相关产品推荐

