.NET 4.6.2集成OpenID Connect时AuthorizationCodeReceived通知不触发
问题排查方向
Owin启动未生效
.NET Framework环境下必须完成Owin启动配置才能让Startup代码执行:- 确认已经安装NuGet包
Microsoft.Owin.Host.SystemWeb,缺少该包会导致Owin管道无法和IIS请求管道对接,中间件完全不执行 - 确认所有
Microsoft.Owin.*开头的NuGet包版本保持一致,版本混装会出现不可预期的运行错误 - 确认Startup类被正确标记,可在Startup类所在的命名空间外层加程序集属性:
[assembly: OwinStartup(typeof(你的项目命名空间.Startup))],或者在web.config的appSettings节点下添加配置指定启动类:
<add key="owin:AutomaticAppStartup" value="true" /> <add key="owin:AppStartup" value="你的项目命名空间.Startup, 你的程序集名称" />- 确认已经安装NuGet包
缺少触发身份验证的逻辑
OIDC中间件不会自动拦截所有请求触发跳转,必须有主动触发身份挑战的入口:- 给需要登录的控制器/Action添加
[Authorize]特性 - 或者手动在需要触发登录的逻辑中调用挑战代码:
HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);如果你访问的是允许匿名访问的路径,没有触发挑战的逻辑,中间件的事件自然不会被触发。
- 给需要登录的控制器/Action添加
配置冲突问题
- 检查web.config是否遗留了表单认证配置,需将authentication节点改为:
<authentication mode="None" />,避免表单认证拦截请求,导致Owin中间件无法处理 - 修正Cookie认证类型不一致的问题:你的代码中
SetDefaultSignInAsAuthenticationType使用的是CookieAuthenticationDefaults.AuthenticationType,但Cookie中间件配置的AuthenticationType是DefaultAuthenticationTypes.ApplicationCookie,二者值不匹配会导致认证流程失败,需统一为同一个值,建议修改为:
app.SetDefaultSignInAsAuthenticationType(DefaultAuthenticationTypes.ApplicationCookie);- 检查web.config是否遗留了表单认证配置,需将authentication节点改为:
中间件注册顺序错误
如果你还注册了其他中间件(如静态文件处理、WebApi路由、MVC路由),需要确保认证中间件注册在所有业务处理中间件的前面,否则请求会被业务中间件提前处理返回,不会走到认证逻辑。
内容的提问来源于stack exchange,提问作者Burre Ifort
相关产品推荐
相关产品推荐

