经典ASP Request.ServerVariables(“LOGON_USER”)返回错误的用户名

时间:2010-02-24 09:51:19

标签: authentication asp-classic

经典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身份验证。

谢谢,

杰瑞

4 个答案:

答案 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用户下运行,因此您获得该名称。请在您身边查看。