获取Windows用户名 – 不同的方法

在.NET中,似乎有几种获取当前Windows用户名的方法。 其中三个是:

string name = WindowsIdentity.GetCurrent().Name; 

要么

 string name = Thread.CurrentPrincipal.Identity.Name; 

要么

 string name = Environment.UserName; 

有什么区别,为什么select一种方法呢? 还有其他的方法吗?

Environment.UserName在advapi32.dll中调用GetUserName。 这意味着如果你冒充另一个用户,这个属性会反映出来。

Thread.CurrentPrincipal有一个setter,可以通过编程来改变。 (这不是模仿btw。)

WindowsIdentity是您当前的Windows身份,如果有的话。 它不一定会反映用户,认为ASP.NET与FormsAuthentication。 然后WindowsIdentity将是NT服务,但FormsIdentity将是login用户。 还有一个PassportIdentity,你可以build立你自己的东西,使事情进一步复杂化。

你要求另外的方法。

当然,您始终可以使用本机Windows API: GetUserName 。

我相信这个地产被放在了几个地方,这样程序员就可以更容易find。 只有一个login用户,并且只有一个相应的名称。

三种方法描述如下:

HttpContext = HttpContext.Current.User,它返回一个IPrincipal对象,它包含当前Web请求的安全信息。 这是经过身份validation的Web客户端。

WindowsIdentity = WindowsIdentity.GetCurrent(),它返回当前正在执行的Win32线程的安全上下文的标识。

Thread = Thread.CurrentPrincipal,它返回当前正在执行的.NET线程的主体,该线程位于Win32线程之上。

它们的结果取决于您的IISconfiguration,如本文所述: http : //msdn.microsoft.com/zh-cn/library/aa302377.aspx