Impersonate 的应用在windows/Forms不同验证类型下的表现!

首先,我在页面中写于下列代码来输出3种不同的Credential。

 Response.Write("Thread: " + Thread.CurrentPrincipal.Identity.Name+"<br/>");
        Response.Write(
"Windws Identity: " + WindowsIdentity.GetCurrent().Name + "<br/>");
        Response.Write(
"HttpContext: " + User.Identity.Name + "<br/>");

Thread:是输出托管线程的identity。

Window Identity:输出OS 的identity.一般是NT AUTHORITY\NETWORK SERVICE,因为.NET Framework寄宿在w3wp.exe(IIS>6.0)。

HttpContext:标识当前上下文Credential.

如果你用的是Windows验证,则Thread,HttpContext为空,但windows Identity为:NT AUTHORITY\NETWORK SERVICE.

所以此时,如果你将Impersonate='True',那么windows Identity: NT AUTHORITY\IUSR
因为Impersonate模拟的window账户.

当你用的是Forms验证,则登录以后:

Thread: gary
Windws Identity: NT AUTHORITY\NETWORK SERVICE
HttpContext: gary
所以我们看到,Thread,HttpContext是在托管环境中设置的. 顺便说一句,当你启用windows 验证,而你想设置Forms验证一样启用了Authority.

   <authorization>
      <allow roles="Role1"/>
      <deny users="*"/>
     </authorization>

那么总是会返回401 unauthority错误。因为不是Adminstrate 组

posted on 2009-10-20 16:54  博览潇湘  阅读(352)  评论(0)    收藏  举报

导航