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

问题描述 投票:0回答:5

经典 ASP Request.ServerVariables("LOGON_USER") 返回错误的用户名。这是场景:

我在域上有两个帐户,一个用于管理,一个用于正常使用。 管理员帐户在运行 ASP 脚本的服务器上设置为 admin(在管理员组中)。服务器是运行 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 身份验证已开启。

谢谢,

贾里

authentication asp-classic
5个回答
7
投票

潜在的问题可能是这样的事实:我使用管理员用户名向同一台服务器打开 $share,同时使用普通用户在同一台服务器上使用 IE 进行 asp 会话。

可以通过控制面板 --> 用户帐户 --> 管理您的密码 --> 选择有问题的服务器并将用户名更改为正确的用户名,将用户更改回正常用户。无需输入密码。好的,关闭并取消。您可能需要打开新的 IE 才能使更改生效。

每次用户“在幕后”更改时都需要执行此操作。


2
投票

根据目前提供的信息,我无法解释您所看到的情况。 我可以告诉你,运行应用程序池的帐户是无关紧要的。

经典 ASP 始终模拟用户,要么是匿名用户帐户,要么是与请求到达的连接关联的用户。 其中可能有解决您问题的线索。

ASP 中的身份验证是在连接级别处理的,一旦连接经过身份验证,它就与用户关联。 客户端和下游的其他 HTTP 设备可以使连接保持打开状态。 到达连接的所有后续请求都不需要重新身份验证,与连接关联的当前用户用于提供处理请求的线程模拟的用户上下文。

我见过中介设备或调试代理(例如 fiddler)维护连接并重新使用它们来处理来自各种客户端的后续请求。 在这种情况下,可以让客户端在一个用户上下文中运行,以便让 Web 服务器在不同用户上下文下处理请求。 讨厌!

我在旧的 Citrix 终端服务器上也看到过同样的情况。 HTTP 连接由终端服务器上运行的多个客户端共享,导致安全上下文交叉。 哎哟!

这种情况的另一种变化是,内联网上的当前用户对服务器上的资源的访问被拒绝。 浏览器显示网络登录对话框,用户输入管理员用户。 在会话期间,浏览器现在使用管理员用户登录凭据来访问同一服务器上的其他资源,即使当前登录的用户也可以这样做。


1
投票

根据此变量的 MSDN 文档:

用户在连接到您的 Web 服务器时模拟的 Windows 帐户。使用 REMOTE_USER、UNMAPPED_REMOTE_USER 或 AUTH_USER 查看请求标头中包含的原始用户名。 LOGON_USER 与这些其他变量保持不同值的唯一情况是您安装了身份验证过滤器。

也许您有身份验证过滤器。


0
投票

IIS 可能在管理员用户下运行,因此您会得到该名称。请在您身边检查一下。


0
投票

如果其他人仍在处理旧版软件并遇到此问题,请转到控制面板下的凭据管理器,并查看“Windows 凭据”下是否有 Web 服务器的凭据。如果是,您可以删除该凭据,并且它不应再使用您的管理员帐户登录。

© www.soinside.com 2019 - 2024. All rights reserved.