ASP.NET 4.8 WebForm接入Openiddict时AuthorizationCodeReceived事件不触发
问题解决方法
AuthorizationCodeReceived事件不触发的核心原因是回调路径配置错误,再结合ASP.NET 4.8 WebForm场景的特有适配要求,按以下步骤排查修改即可:
1. 修正CallbackPath配置
你当前代码中的回调路径配置存在明显错误:
CallbackPath = new PathString("//"), //signin-oidc
双斜杠的路径规则无法匹配OpenIddict返回的回调请求,如果你要使用默认的signin-oidc回调路径,直接修改为:
CallbackPath = new PathString("/signin-oidc")
同时必须保证两处配置完全一致:
- OpenIddict服务端给该客户端注册的
RedirectUri值为https://你的客户端域名/signin-oidc - 代码中读取的
_redirectUri配置项值和上面的地址完全匹配
2. 修复WebForm路由拦截问题
WebForm默认的路由规则会将/signin-oidc当做aspx页面路径处理,导致请求被路由模块拦截,无法传递到OWIN中间件。你需要在RouteConfig.cs的路由注册逻辑最开头添加忽略规则:
routes.IgnoreRoute("signin-oidc");
3. 修正Web.config适配配置
确认Web.config中开启以下适配配置,避免ASP.NET默认规则拦截OWIN请求:
- 关闭默认表单认证,交由OWIN接管认证逻辑:
<system.web> <authentication mode="None" /> <authorization> <allow users="*" /> </authorization> </system.web>
- 开启托管模块处理所有请求,保证OWIN中间件能接收到回调请求:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="FormsAuthentication" /> </modules> </system.web>
4. 可选:添加错误捕获定位问题
如果修改后仍然无法触发事件,可以在OpenIdConnectAuthenticationNotifications配置中添加错误事件捕获具体报错原因:
AuthenticationFailed = context => { // 可在此处输出日志查看具体错误 context.HandleResponse(); context.Response.Redirect($"/Error?msg={context.Exception.Message}"); return Task.CompletedTask; }
内容的提问来源于stack exchange,提问作者Igor Klimenko
相关产品推荐
相关产品推荐

