升级到IIS 8.5后经典ASP的AUTH_USER、LOGON_USER服务器变量为空如何解决
你尝试的Response.Write(User.Identity.Name.ToString())、<% WindowsIdentity.GetCurrent().Name %>、<% HttpContext.Current.User.Identity.Name %>均为ASP.NET的语法,而你使用的是经典ASP环境,两者不兼容,所以出现报错属于正常情况,不需要再尝试这类.NET代码。
以下是可尝试的排查方案:
- 调整Windows身份验证提供程序顺序
打开IIS管理器,定位到你的站点,点击「身份验证」,右键选中「Windows身份验证」选择「提供程序」,把「NTLM」上移到列表第一位,保存后重启站点重试。部分老经典ASP应用对默认优先的Kerberos(协商)认证适配性差,调整提供程序顺序可解决此类问题。 - 关闭内核模式身份验证
同样在Windows身份验证的右键菜单中选择「高级设置」,取消勾选「启用内核模式身份验证」,保存后重启站点重试。IIS 7+默认开启的内核模式认证在部分场景下会导致经典ASP无法读取身份相关的服务器变量。 - 调整应用程序池托管管道模式
打开应用程序池配置,选中你的站点对应的应用程序池,点击「基本设置」,把「托管管道模式」从「集成」修改为「经典」,重启应用程序池后重试。经典ASP运行在集成管道模式下时常出现服务器变量读取异常的问题。 - 测试完整服务器变量输出
新建一个纯测试ASP页面,代码如下:
访问该页面,确认除了<% Response.Write "所有服务器变量列表:<br/><hr/>" For Each var In Request.ServerVariables Response.Write "<strong>" & var & "</strong>: " & Request.ServerVariables(var) & "<br/>" Next %>AUTH_USER、LOGON_USER之外,REMOTE_USER变量是否也为空,同时排查是否有其他身份相关变量存在值。 - 排查父级配置的服务器变量屏蔽规则
检查站点父级配置(比如服务器级别、站点根级别)的web.config,是否存在<remove name="AUTH_USER" />或者<clear />这类清除服务器变量的配置,导致变量被拦截无法传递到ASP页面。 - 确认客户端身份验证行为
检查访问站点的浏览器是否把站点加入了可信站点/Intranet站点列表,非可信域的站点浏览器默认不会自动传递Windows身份凭据,会导致身份验证流程不完整,服务器变量为空。 - 检查ASP模块配置
打开站点的「处理程序映射」,确认.asp后缀的处理程序是正确的Asp.dll,且没有被其他处理程序优先级覆盖。
内容的提问来源于stack exchange,提问作者Sol Web Solutions
相关产品推荐
相关产品推荐

