5

这是之前发布的关于无法模拟当前登录的Windows用户的后续内容。有很多好的建议,但前面的线程变得混乱,所以我正在重置这篇文章。希望下面记录的当前状态显而易见问题是什么。这是一条很破旧的路径,所以我必须相信我所缺少的只是一点配置步骤。ASP.NET模拟问题(第2部分)

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

我正在使用Environment.Username来确定此用户是谁。有人建议这个属性总是返回登录的用户名,但是从我的测试中它返回了来自IIS的模拟用户。

例如,如果我的web.config有...

<identity impersonate="true" /> 

当我IIS 7.5下运行与设置,Environment.Username回报IUSR。我相信这是IIS匿名用户帐户。

如果我改变web.config中......

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

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

这里是我的IIS设置...

.NET授权规则 .NET Authorization Rules

认证 Authentication

一个问题,如果我禁用匿名身份验证,然后我提示登录到现场。我认为如果您是通过域上的Active Directory帐户登录的,那么这个挑战不会出现?即使我在这个提示中输入了我的用户名/密码,我仍然没有得到模拟的工作。

enter image description here

基本设置

Basic Settings

回答

1

我也有类似的问题,因为你描述。问题的基本症结在于模仿和授权是有区别的。我对此的简单理解是,当客户端和服务器位于同一台机器上时,模拟将起作用。但是,如果客户端在不同的机器上,则需要委派。

MSDN Reference

是什么模拟和代表团之间的区别?

模拟在同一台计算机上将原始的 来电者身份流到后端 资源。 委托将原始呼叫者的 标识流动到运行服务的计算机 以外的 计算机上的后端资源。

相关SO问题

0

您是否尝试过使用

HttpContext.Current.User.Identity.Name ? 
+0

是的,挣扎返回与Environment.Username相同的名称。 – 2011-05-21 13:41:30

2

我不知道你是否已经找到答案,但是如果有人是有它的问题,你需要在你的web.config文件

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

以下和IIS,你需要Asp.net模拟启用,以及启用Windows身份验证,其他应禁用。在Windows身份验证中,转至高级设置并取消选中启用内核模式身份验证。这应该做到这一点。您的网站现在应该为本地Intranet应用程序设置和使用任何以下的将工作

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

但使用Environment.Username只会返回服务器名称,希望这可以帮助任何人以这种