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

Pav*_*nin 5 asp.net security impersonation windows-identity current-principal

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

<authentication mode="Windows" />
<identity impersonate="true" userName="name" password="passord"/>
Run Code Online (Sandbox Code Playgroud)

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

这些身份不应该相同吗?

在这种情况下,代码运行的凭据是什么?

And*_*bov 10

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

  • 正如你所说的那样完全正常.Thread.CurrentPrincipal设置为身份验证的结果.无论是Basic,Digest,Windows还是Forms身份验证.这个原则无非就是一张用户收到的票.而WindowsIdentity与运行线程和进程有关.如果只有Windows身份验证.已启用并且模拟已启用,则身份将相同.如果启用了匿名登录,则CurrentPrinciple.Identity具有空名称. (3认同)