Get Windows user name - different methods

北慕城南 提交于 2019-12-29 18:33:13

问题


In .NET there appears to be several ways to get the current Windows user name. Three of which are:

string name = WindowsIdentity.GetCurrent().Name;

or

string name = Thread.CurrentPrincipal.Identity.Name;

or

string name = Environment.UserName;

What's the difference, and why choose one method over the other? Are there any other ways?


回答1:


Environment.UserName calls GetUserName within advapi32.dll. This means that if you're impersonating another user, this property will reflect that.

Thread.CurrentPrincipal has a setter and can be changed programmatically. (This is not impersonation btw.)

WindowsIdentity is your current windows identity, if any. It will not necessarily reflect the user, think ASP.NET with FormsAuthentication. Then the WindowsIdentity will be the NT-service, but the FormsIdentity will be the logged in user. There's also a PassportIdentity, and you can build your own stuff to complicate things further.




回答2:


You asked for alternative ways.

Of course, you can always use the native Windows API: GetUserName.




回答3:


I believe the property was put in several places so that it would be easier for the programmer to find. There's only one logged in user, and only one respective name.




回答4:


The three methods are described as follow:

HttpContext = HttpContext.Current.User, which returns an IPrincipal object that contains security information for the current Web request. This is the authenticated Web client.

WindowsIdentity = WindowsIdentity.GetCurrent(), which returns the identity of the security context of the currently executing Win32 thread.

Thread = Thread.CurrentPrincipal which returns the principal of the currently executing .NET thread which rides on top of the Win32 thread.

And they change in result depending on your IIS configuration as explained in this article: http://msdn.microsoft.com/en-us/library/aa302377.aspx



来源:https://stackoverflow.com/questions/3175004/get-windows-user-name-different-methods

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!