System.Security.Principal.WindowsIdentity.GetCurrent()。Name与User.Identity.Name,应该使用哪一个?

时间:2019-07-09 17:01:47

标签: asp.net-core claims-based-identity windows-identity

只是想了解这里的区别。我将我的ASP.Net Core Vue.js应用程序从Win 7桌面移到了Win服务器上,但它崩溃了

  

User.Identity.Name

所以现在该值为空。

所以我将其更改为

  

System.Security.Principal.WindowsIdentity.GetCurrent()。Name

,它又可以在我的台式机和Win服务器上正常工作了。

有什么区别,我应该继续使用后者吗?

1 个答案:

答案 0 :(得分:0)

不。它们是完全不同的东西。 HttpContext.User是通过特定用户身份验证创建的ClaimsPrincipalSystem.Security.Principal.WindowsIdentity是应用程序池使用的主体。这样,它对于应用程序将是一个常数,而HttpContext.User将是向您的应用程序发出请求的实际用户,前提是他们已通过身份验证。

我认为人们在本地开发和使用Windows身份验证时会感到困惑。在那种特定情况下,两者将是相同的,因为IIS Express在您的本地用户帐户下运行,这当然也是Windows对您进行身份验证的方式。在几乎所有其他情况下,它们都会有所不同,并且很明显,System.Security.Principal.WindowsIdentity不是您想要的。

现在,关于User.Identity.Name为空的原因,您可能希望通过Windows进行身份验证,但尚未为该应用启用Windows身份验证,这意味着您实际上尚未登录。右键单击项目( s),选择“属性”,然后转到“调试”选项卡。在屏幕底部,确保选中了“启用Windows身份验证”。如果您的网站上有不需要授权的任何部分,请确保还选中了“启用匿名身份验证”,或者可以取消选中“启用匿名身份验证”,以强制对网站的所有访问进行授权。