帮助理解冒充

rau*_*and 5 asp.net impersonation


有人可以帮我理解"冒充"的概念吗?

我理解的方式是,当模拟发生时,代码代表某些身份执行.

因此,对于网页,只要禁用模拟,网页将始终在其配置的帐户下运行.

如果已启用,我可以"覆盖"其默认帐户并设置我希望运行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()

是同一用户,请求页面的用户.

Muh*_*tar 1

使用模拟时,ASP.NET 应用程序可以选择使用它们所代表的客户端的身份来执行。这样做的通常原因是避免处理 ASP.NET 应用程序代码中的身份验证和授权问题。相反,您依靠 IIS 来对用户进行身份验证,并将经过身份验证的令牌传递给 ASP.NET 应用程序,或者如果无法对用户进行身份验证,则传递未经身份验证的令牌。

来自非常好的文章ASP.NET 模拟