Как найти имя пользователя/идентификатор в С#

Мне нужно программно найти имя пользователя с помощью С#. В частности, я хочу, чтобы пользователь системы/сети подключился к текущему процессу. Я пишу веб-приложение, которое использует встроенную защиту Windows.

Ответы

Ответ 1

Абстрагированный вид идентичности часто является IPrincipal/IIdentity:

IPrincipal principal = Thread.CurrentPrincipal;
IIdentity identity = principal == null ? null : principal.Identity;
string name = identity == null ? "" : identity.Name;

Это позволяет работать с одним и тем же кодом во многих разных моделях (winform, asp.net, wcf и т.д.), но он полагается на то, что идентификатор устанавливается заранее (так как он определен в приложении). Например, в winform вы можете использовать текущее имя пользователя Windows:

Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());

Однако, главный может также быть полностью на заказ - он не обязательно относится к учетным записям Windows и т.д. Другое приложение может использовать экран входа в систему, чтобы позволить произвольным пользователям регистрироваться:

string userName = "Fred"; // todo
string[] roles = { "User", "Admin" }; // todo
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(userName), roles);

Ответ 2

Зависит от контекста приложения. Вы можете использовать Environment.UserName(консоль) или HttpContext.Current.User.Identity.Name(web). Обратите внимание, что при использовании встроенной проверки подлинности Windows вам может потребоваться удалить домен из имени пользователя. Кроме того, вы можете получить текущего пользователя, используя свойство пользователя страницы в codebehind, вместо того, чтобы ссылаться на него из текущего контекста HTTP.

Ответ 3

string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name ;