ASP.NET项目升级至4.8后NTLM认证通过却跳转至~/Account/Login问题求助
排查方向
- 检查Owin中间件配置
若项目引用了Microsoft.Owin.Security.Cookies包,默认注册的Cookie认证中间件会将未通过Cookie认证的请求重定向到~/Account/Login。NTLM为多轮握手认证,首轮请求未携带身份信息时就会触发Owin的重定向逻辑,而Basic认证为单次握手不会触发该问题。
可直接删除Startup.cs中UseCookieAuthentication相关的注册代码,若需保留可修改重定向逻辑:Windows认证场景下401响应不触发登录跳转,直接返回状态码即可。 - 检查全局HTTP模块配置
查看Web.config中system.web/httpModules和system.webServer/modules节点,是否存在FormsAuthenticationModule、IdentityModule等身份认证相关模块,即使IIS关闭了表单认证,这些模块仍会自动拦截请求触发重定向,确认无用后可删除对应注册项。 - 定位重定向触发来源
在Global.asax的Application_EndRequest事件中加入堆栈日志逻辑,直接定位触发重定向的组件:protected void Application_EndRequest(object sender, EventArgs e) { if (Response.StatusCode == 302 && Response.RedirectLocation?.Contains("Account/Login") == true) { // 将堆栈信息写入日志文件即可查看重定向调用来源 var stackTrace = Environment.StackTrace; File.WriteAllText(@"C:\temp\redirect_stack.log", stackTrace); } } - 检查IIS站点级配置
- 进入IIS站点→认证→Windows认证→右键「提供程序」,调整顺序将
NTLM放到Negotiate上方,避免Kerberos认证失败降级过程触发异常重定向 - 检查IIS站点是否启用了官方WebDAV发布功能,该功能会和自定义WebDAV Handler冲突,如有启用请关闭
- 进入IIS站点→认证→Windows认证→右键「提供程序」,调整顺序将
- 检查Handler执行顺序
确认system.webServer/handlers节点中,自定义WebDavHandler的注册顺序在所有系统默认Handler之前,避免默认Handler先处理请求篡改路径后再转发到自定义Handler - 检查授权配置
确认system.web下没有继承父级配置的异常授权规则,可显式添加配置允许所有已认证用户访问:<authorization> <deny users="?" /> <allow users="*" /> </authorization> - 核对Nuget包变更
对比升级前后的packages.config文件,排查Microsoft.AspNet.*、System.Web.*系列包的版本变化,确认是否因包版本升级引入了默认的身份拦截逻辑。
内容的提问来源于stack exchange,提问作者Zoltan Hernyak
相关产品推荐
相关产品推荐

