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

Как получить текущую учетную запись Windows с учетной записи ASP.NET?

У меня есть приложение ASP.NET 3.5, использующее аутентификацию форм ASP.NET. Я хочу иметь возможность получить имя пользователя Windows, которое в настоящее время зарегистрировано на компьютере (НЕ входит в приложение ASP.NET, но в Windows), когда данные редактируются на странице.

Если я использую Context.User.Identity.Name.Tostring(), я получаю имя пользователя, зарегистрированное в приложении ASP.NET, но мне нужно имя учетной записи Windows.

System.Security.Principal.WindowsIdentity.GetCurrent().Name.Tostring()

Кроме того, он работает только при запуске веб-сайта из Visual Studio, но после его развертывания в IIS он возвращает NT AUTHORITY\SYSTEM.

4b9b3361

Ответ 1

Вы должны установить режим аутентификации Windows в своей конфигурации, а также отключить анонимных пользователей в теге авторизации.

Ответ 2

Чтобы получить зарегистрированного пользователя в учетной записи Windows, вы должны использовать Windows authentication вместо Forms authentication:

System.Security.Principal.WindowsIdentity.GetCurrent(). Name.Tostring() также работает только при запуске веб-сайта из визуальной студии, но после развертывание в IIS возвращает NT AUTHORITY\SYSTEM

Отображает текущего пользователя приложения. Когда вы размещаете свое приложение на веб-сервере Visual Studio, оно использует вашу локальную учетную запись. Однако, когда вы войдете в веб-приложение с разными учетными данными, он всегда будет показывать ваш текущий вход в Windows.

Приложение, развернутое в IIS, использует вашу учетную запись NT AUTHORITY\SYSTEM в вашем случае.

Ответ 3

Я использую это:

System.Security.Principal.WindowsPrincipal user;
user = new WindowsPrincipal(this.Request.LogonUserIdentity);
this.Request.LogonUserIdentity.Impersonate();
user_name = user_name.Substring(user_name.LastIndexOf("\\") + 1);

Ответ 4

Чтобы получить текущего пользователя в Windows на С#, используйте:

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

Ответ 5

string strName = HttpContext.Current.User.Identity.Name.ToString();

как вы хотели, чтобы это было правильно, но вам нужно сначала настроить веб-сервер, ссылаясь на Как получить окно NT Logged User Name с помощью ASP. NET (первые шаги настройки веб-сервера).

Ответ 6

Попробуйте следующую строку кода:

string loggedOnUser = string.Empty;
 loggedOnUser = Request.ServerVariables.Get("AUTH_USER");

Вы не можете получать значения при запуске приложения из Visual Studio... Проверьте его после развертывания в IIS.

Для получения имени пользователя используйте:

string userName = string.Empty;
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "Your Domain Name"))
{
    UserPrincipal user = new UserPrincipal(pc);
    user = UserPrincipal.FindByIdentity(pc, "User ID Will Come here");
    if (user != null)
    {
        userName = user.GivenName + " " + user.Surname;

    }
    else
    {
        //return string.Empty;
        userName = "User Not Found";
    }
}

Ответ 7

Я боролся и боролся и боролся с этим. Одна из вещей заключается в том, что у меня нет доступа к IIS, который заблокирован, поэтому я не мог изменить какие-либо параметры сервера. Мне пришлось пойти с тем, что я мог сделать в коде. Когда я исследовал это, многие из ответов сказали: "настроить IIS как это".,. Хорошо, что отлично, когда у вас есть доступ к IIS, но я этого не делал - мне приходилось работать с тем, что я мог сделать в коде. Итак, я закончил работу с этим следующим образом:

В моем файле веб-конфигурации я добавил следующие строки кода в    раздел:

<system.webServer>
<security>
  <authentication>
    <anonymousAuthentication enabled="false" />
    <windowsAuthentication enabled="true" />
  </authentication>
</security>
</system.webServer>

Затем он возвратил ошибку на моем локальном компьютере, и мне пришлось войти и исправить. Я пошел в файл applicationhost.config, расположенный по следующему пути на моей машине (ваш может быть другим):

C:\users\ "ваше имя пользователя" \Мои документы \ "yourIISInstallation" \config\applicationhost.config

и я изменил следующие настройки на "allow", который был настроен на "deny":

<section name="anonymousAuthentication" overrideModeDefault="Deny" />

изменено на

<section name="anonymousAuthentication" overrideModeDefault="Allow" />

и

<section name="windowsAuthentication" overrideModeDefault="Deny" />

к

<section name="windowsAuthentication" overrideModeDefault="Allow" />

в

<sectionGroup name="authentication">

раздела. Прежде чем я узнал об этом, я вытащил свои волосы из-за этого. Я надеюсь, что это помогает кому-то. Как только я ввел вышеуказанный код в файл webconfig, он работал в интрасети, он просто возвращал ошибки в моем локальном, но как только я добавил это в свой локальный файл applicationhost.config, он начал работать на моем локальном также. Затем я вызвал следующую переменную, чтобы вернуть имя зарегистрированного пользователя в окнах:

    HttpContext.Current.User.Identity.Name.ToString().Substring((HttpContext.Current.User.Identity.Name.ToString().IndexOf("\\")) + 1);

Ура!