有人能帮我理解'假冒'的概念吗?帮助理解假冒
我理解的方式是,当发生模拟时,代码将代表某个身份执行。
因此,对于网页,只要禁用模拟,网页将始终在其配置的帐户下运行。
如果已启用,我可以“覆盖”其默认帐户并设置我希望Web应用程序运行的帐户。
因此,如果我使用IIS7,并且我有以下内容:
- 标识设置为自定义帐户“user1”的应用程序池。
- 一个asp.net网站,其应用程序池设置为上面的一个,禁用模拟。
- 启用Windows身份验证。
我也有以下代码:
的IIdentity II = Thread.CurrentPrincipal.Identity;
IIdentity iii = Page.User.Identity;
如果我访问该页面,我被要求提供Windows凭据,我介绍'user2'凭证。
由于禁用模拟功能,我认为IIdentity名称是'user1',它不是'user2'。
有人能帮我理解发生了什么吗?我想我完全误解了“模仿”的概念。
感谢
更新1
我碰到这个链接来寻找了一段时间后: http://msdn.microsoft.com/en-us/library/aa302377.aspx
好像有三个IIdentity的对象。
HttpContext.Current.User.Identity
Thread.CurrentPrincipal.Identity
的WindowsIdentity I2 = WindowsIdentity.GetCurrent();
从链接我的理解是:
HttpContext.Current.User.Identity:表示请求的页面当前用户。
Thread.CurrentPrincipal.Identity:当前正在执行该线程的标识。我猜这个身份将是当前Web请求运行的标识,并且它的asp.net角色将定义用户在应用程序中可以做什么和不可以做什么。
我想大多数时候HttpContext.Current.User.Identity和Thread.CurrentPrincipal.Identity都是同一个用户,但对于某些场景,我猜请求页面的用户和Thread.CurrentPrincipal.Identity可能是不同。
然后是: WindowsIdentity i2 = WindowsIdentity。GetCurrent();
链接说:“的WindowsIdentity = WindowsIdentity.GetCurrent(),它返回当前执行的Win32线程的安全上下文的身份。”
做了几个测试,实现了一个禁止“模仿”之后和我目前的情况是,我发现这是得到模拟的身份。
如果我不模仿,'WindowsIdentity.GetCurrent();'将反映应用程序池中配置的用户,如果我模拟,身份更改为我在web.config中设置的身份:
<identity impersonate="true" password="**" userName="****" />
更新2
如果我设置的web.config为: <identity impersonate="true" />
WindowsIdentity.GetCurrent()被模拟的作为用户作出这样的请求:
HttpContext.Current.User.Identity
Thread.CurrentPrincipal.Identity
WindowsIdentity.GetCurrent()
在同一个用户,用户请求页面。
感谢您的答复和文章!..这是混淆了我......“当使用模拟,ASP.NET应用程序可以选择与他们的客户的身份执行代表他们正在操作“,所以如果我不使用'模拟'我猜应用程序应该继续使用网站配置帐户执行? (在IIS7中,内置帐户或自定义帐户之一)...在我上面的情况下,如果我不使用模拟,为什么显示'user2'的身份名称我认为它应该仍然是' user1',.. – rauland 2011-04-09 15:03:22
如果您未使用模拟,那么它不会使用IIS内置帐户或自定义帐户之一。 – 2011-04-09 18:07:10