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/>");
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 组
浙公网安备 33010602011771号