求助:IIS 8.5根站点Windows Authentication失效,子应用正常
这种根Web应用用Windows Authentication触发403.14但子应用完全正常的情况,我之前在维护内网ASP.Net MVC站点时碰到过好几次。结合你提到的细节——全HTTPS访问、内部CA证书、日志显示AD信息已传递,核心问题大概率出在IIS根站点的默认文档/目录浏览配置、Windows Auth的继承冲突,或者MVC路由的特殊设置上,下面给你一步步排查解决的思路:
403.14本质是IIS找不到可返回的默认文档,同时又禁用了目录浏览功能。子应用正常是因为它的web.config或IIS配置已经处理了这个问题,但根站点可能继承了服务器级的严格设置:
- 打开IIS管理器,定位到你的根站点:
- 点击目录浏览,右侧操作栏点「启用」——先临时测试,如果启用后403.14消失,说明就是这个原因,之后再调整默认文档而非一直开着目录浏览;
- 点击默认文档,把你的MVC应用的入口相关项(比如
index.cshtml,或者对应默认路由的default.aspx)移到列表最顶部,确保IIS优先尝试加载它。
补充:ASP.Net MVC依赖路由系统,如果根站点没配置默认文档,IIS会直接尝试返回目录内容,而目录浏览禁用就会触发403.14。子应用的web.config里可能已经配置了路由规则或者默认文档,所以不受影响。
虽然日志显示AD信息已传递,但根站点的Windows Auth配置可能和服务器级或子应用的配置有冲突,导致IIS没把身份信息正确传给MVC管道:
- 打开根站点的
web.config,确保以下配置正确:<system.webServer> <security> <authentication> <windowsAuthentication enabled="true" /> <anonymousAuthentication enabled="false" /> </authentication> </security> <modules runAllManagedModulesForAllRequests="true"> <!-- 确保站点的Managed Pipeline Mode是Integrated,这个配置能让所有请求经过托管模块处理 --> </modules> </system.webServer> <system.web> <authentication mode="Windows" /> <authorization> <deny users="?" /> <!-- 明确拒绝匿名访问,强制走Windows Auth --> </authorization> </system.web> - 对比子应用的
web.config,看看有没有差异,尤其是modules和authentication部分——根站点可能没继承到正确的托管模块配置,导致Windows Auth的身份信息无法被MVC应用识别。
因为站点只用HTTPS,且用内部CA证书,可能存在SPN(服务主体名称)配置不完整的问题,虽然日志显示AD信息传递,但IIS无法完成身份验证的最后一步:
- 用管理员权限打开命令提示符,先查看当前服务器的SPN条目:
setspn -L 你的服务器主机名 - 检查是否存在
HTTP/你的站点域名和HTTPS/你的站点域名的条目,如果没有,手动添加:setspn -A HTTP/你的站点域名 你的服务器主机名 setspn -A HTTPS/你的站点域名 你的服务器主机名注意:SPN配置需要域管理员权限,一定要确保域名和服务器名完全匹配,避免重复SPN导致的身份验证失败。
最后,根站点的MVC路由可能没配置默认路由,导致IIS找不到对应的控制器/动作,从而返回403.14:
- 打开根应用的
RouteConfig.cs,确认默认路由存在且正确:public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } - 同时确认
HomeController的Index动作存在,且没有额外的权限限制——子应用的路由配置是正确的,所以能正常访问。
按照这个顺序排查,基本能解决问题。如果还有疑问,可以把根站点和子应用的web.config关键部分贴出来,再进一步分析。
内容的提问来源于stack exchange,提问作者John S

