Получить имя пользователя Windows - разные методы - PullRequest
36 голосов
/ 04 июля 2010

В .NET существует несколько способов получить текущее имя пользователя Windows. Три из которых:

string name = WindowsIdentity.GetCurrent().Name;

или

string name = Thread.CurrentPrincipal.Identity.Name;

или

string name = Environment.UserName;

В чем разница, и почему один метод выбирается над другим? Есть ли другие способы?

Ответы [ 4 ]

31 голосов
/ 04 июля 2010

Environment.UserName вызывает GetUserName в advapi32.dll. Это означает, что если вы выдаете себя за другого пользователя, это свойство будет отражать это.

Thread.CurrentPrincipal имеет установщик и может быть изменен программно. (Между прочим, это не подражание).

WindowsIdentity - это ваша текущая windows личность, если таковая имеется. Это не обязательно будет отражать пользователя, подумайте ASP.NET с FormsAuthentication. Тогда WindowsIdentity будет NT-сервисом, а FormsIdentity будет зарегистрированным пользователем. Также есть PassportIdentity, и вы можете создавать свои собственные вещи, чтобы усложнять ситуацию.

1 голос
/ 04 июля 2010

Вы просили альтернативные способы.

Конечно, вы всегда можете использовать собственный Windows API: GetUserName .

0 голосов
/ 04 сентября 2013

Три метода описаны следующим образом:

HttpContext = HttpContext.Current.User, который возвращает объект IPrincipal, который содержит информацию о безопасности для текущего веб-запроса.Это аутентифицированный веб-клиент.

WindowsIdentity = WindowsIdentity.GetCurrent (), который возвращает идентификатор контекста безопасности текущего выполняющегося потока Win32.

Thread = Thread.CurrentPrincipal, который возвращаетпринципал текущего выполняющегося потока .NET, который работает поверх потока Win32.

И они меняются в результате в зависимости от конфигурации IIS, как описано в этой статье: http://msdn.microsoft.com/en-us/library/aa302377.aspx

0 голосов
/ 04 июля 2010

Я полагаю, что свойство было размещено в нескольких местах, чтобы программисту было легче его найти.Только один зарегистрированный пользователь и только одно соответствующее имя.

...