经典ASP Request.ServerVariables(“LOGON_USER”)返回错误的用户名。这是场景:
我在域上有两个帐户,一个用于管理,一个用于正常使用。 管理员帐户在运行ASP脚本的服务器上设置为admin(在Administrators组中)。服务器是运行IIS 6.0的Windows 2003。
我使用普通用户帐户登录我的计算机并转到该页面,它将返回我的管理员帐户用户名。为什么会这样?这适用于其他人。
<%
Response.Write "LOGON_USER: " & Request.ServerVariables("LOGON_USER") & "<br>"
Response.Write "REMOTE_USER: " & Request.ServerVariables("REMOTE_USER") & "<br>"
Response.Write "AUTH_USER: " & Request.ServerVariables("AUTH_USER") & "<br>"
Response.Write "<br>"
'Show all server variables
For Each Item In Request.ServerVariables
Response.Write Item & " = " & Request.ServerVariables(Item) & "<br>"
Next
%>
关闭匿名访问并启用Windows身份验证。
谢谢,
杰瑞
答案 0 :(得分:5)
潜在的问题可能是我在同一台服务器上使用管理员用户名打开$ share,同时在普通用户的IE服务器上使用asp会话。
可以从控制面板更改用户恢复正常状态 - &gt;用户帐户 - &gt;管理您的密码 - &gt;选择有问题的服务器并将用户名更改为正确的用户名。无需输入密码。好的,关闭并取消。您可能需要打开一个新的IE才能使更改生效。
每次用户更改“幕后”时都需要这样做。
答案 1 :(得分:2)
根据迄今提供的信息,我无法解释您所看到的内容。我可以告诉你,App池运行的帐户是无关紧要的。
经典ASP始终模拟用户匿名用户帐户或与请求到达的连接关联的用户。这可能是你的问题的线索。
ASP中的身份验证在连接级别处理,一旦连接已通过身份验证,它就与用户关联。客户端和下游的其他HTTP设备可以保持连接打开。到达连接的所有后续请求都不需要重新认证,与连接关联的当前用户用于提供处理请求的线程模拟的用户上下文。
我已经看到中间设备或调试代理(例如fiddler)维护连接并将它们重新用于来自各种客户端的后续请求。在这种情况下,可以让客户端在一个用户上下文中运行,以便在不同用户的上下文中由Web服务器处理请求。讨厌!
我在较旧的Citrix终端服务器上看到了同样的事情。 HTTP连接由在终端服务器上运行的多个客户端共享,导致安全上下文的交叉。哎哟!
另一种变体是,对于Intranet上的当前用户,拒绝访问服务器上的资源。浏览器显示“网络登录”对话框,用户输入管理员用户。在会话期间,浏览器现在使用管理员用户登录凭据访问同一服务器上的其他资源,即使当前登录的用户也会这样做。
答案 2 :(得分:1)
根据此变量的MSDN文档:
用户在连接到Web服务器时模拟的Windows帐户。使用REMOTE_USER,UNMAPPED_REMOTE_USER或AUTH_USER查看请求标头中包含的原始用户名。如果您安装了身份验证筛选器,则唯一一次LOGON_USER保存与其他变量不同的值。
也许你有一个身份验证过滤器。
答案 3 :(得分:0)
IIS可能在Admin用户下运行,因此您获得该名称。请在您身边查看。