Подтвердить что ты не робот

Получить имя пользователя Windows - разные методы

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

string name = WindowsIdentity.GetCurrent().Name;

или

string name = Thread.CurrentPrincipal.Identity.Name;

или

string name = Environment.UserName;

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

4b9b3361

Ответ 1

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

Thread.CurrentPrincipal имеет сеттер и может быть изменен программно. (Это не олицетворение кстати.)

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

Три метода описаны ниже:

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

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

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

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