打开模拟时,为什么Thread.CurrentPrincipal.Identity和WindowsIdentity.GetCurrent()会有所不同?

时间:2013-08-13 09:32:16

标签: asp.net security impersonation windows-identity current-principal

我启用了模拟和Windows身份验证。

<authentication mode="Windows" />
<identity impersonate="true" userName="name" password="passord"/>

但是Thread.CurrentPrincipal.Identity.Name返回经过身份验证的用户的名称,WindowsIdentity.GetCurrent()返回模拟身份。

这些身份不应该相同吗?

在这种情况下代码是否运行?

1 个答案:

答案 0 :(得分:10)

据我所知,Thread.CurrentPrincipal包含线程已启动的条件信息,包括WindowsIdentity。这就是Thread.CurrentPrincipal.Identity.Name返回启动线程的用户名的原因。 相反,WindowsIdentity.GetCurrent()返回一个WindowsIdentity对象,该对象表示当前Windows用户,该用户已通过Impersonation进行了更改。 我不是100%肯定它,但我认为这是有效的。