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 组

你可能感兴趣的:(windows)