5

这是上一篇关于无法模拟当前登录的 Windows 用户的帖子的后续内容。有很多很好的建议,但是之前的帖子越来越乱了,所以我正在用这篇文章重新设置。希望根据下面记录的当前状态,问题是什么很明显。这是一条陈旧的道路,所以我必须相信我所缺少的只是一个小配置步骤。

问题:我需要让 ASP.NET 模拟当前登录的用户。当我在 IIS 7.5 下运行时,它不起作用。IIS Express 工作正常,但我相信这是因为调试会话是在我的用户 ID 下运行的。

Environment.Username用来确定这个用户是谁。有人建议此属性始终返回登录的用户名,但根据我的测试,它会返回来自 IIS 的模拟用户。

例如,如果我的 web.config 有……</p>

    <identity impersonate="true" />

当我使用该设置在 IIS 7.5 下运行时,Environment.Username返回IUSR。我相信这是 IIS 匿名用户帐户。

如果我将 web.config 更改为...</p>

    <identity impersonate="true" userName="domain\jlivermore" password="mypassword" />

… 然后 Environment.Username 返回 jlivemore。但是,我需要它返回 jlivermore 而无需我在 web.config 中明确设置它。

这是我的 IIS 设置...</p>

.NET 授权规则 .NET 授权规则

验证 验证

一个问题,如果我禁用匿名身份验证,则会提示我登录该站点。我想如果您使用域上的 Active Directory 帐户登录,那么这个挑战就不会出现?即使我在此提示中输入我的用户名/密码,我仍然无法让模拟工作。

在此处输入图像描述

基本设置

基本设置

4

3 回答 3

3

我不确定您是否找到了答案,但如果有人遇到问题,您需要在 web.config 文件中添加以下内容

<authentication mode="Windows"/>
<identity impersonate="true"/>

在 IIS 中,您需要启用 Asp.net Impersonation 以及启用 Windows 身份验证,其他应禁用。在 Windows 身份验证中,转到高级设置并取消选中启用内核模式身份验证。那应该这样做。您的站点现在应该设置为本地 Intranet 应用程序,并且使用以下任何一种都可以

System.Security.Principal.WindowsIdentity.GetCurrent().Username()
HttpContext.Current.User.Identity.Name
System.Threading.Thread.CurrentPrincipal.Identity.Name

但是使用 Environment.Username 只会返回服务器名称,希望这可以帮助任何为此苦苦挣扎的人

于 2011-08-04T21:33:20.473 回答
1

我遇到了与您描述的类似的问题。问题的基本症结在于冒充和委托之间存在差异。我对此的简单理解是,当客户端和服务器在同一台机器上时,模拟将起作用。但是,如果客户端在另一台机器上,则需要委托。

MSDN 参考

模拟和委托有什么区别?

模拟将原始调用者的身份流向同一台计算机上的后端资源。 委派将原始调用者的身份流向运行服务的计算机以外的计算机上的后端资源。

相关的 SO 问题

于 2011-05-19T05:38:06.853 回答
0

您是否尝试过使用

HttpContext.Current.User.Identity.Name ?
于 2011-05-20T08:35:21.900 回答