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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:45:03