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()
是同一用户,请求页面的用户.
使用模拟时,ASP.NET 应用程序可以选择使用它们所代表的客户端的身份来执行。这样做的通常原因是避免处理 ASP.NET 应用程序代码中的身份验证和授权问题。相反,您依靠 IIS 来对用户进行身份验证,并将经过身份验证的令牌传递给 ASP.NET 应用程序,或者如果无法对用户进行身份验证,则传递未经身份验证的令牌。
来自非常好的文章ASP.NET 模拟
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |