Как получить текущую учетную запись loggedin 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 AUTHORITYSYSTEM.

8 ответов


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


чтобы получить текущего пользователя, вошедшего в учетную запись Windows, вы должны использовать Windows authentication вместо Forms authentication:


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

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

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

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

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

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

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

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

изменено на

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

и

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

to

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

на

<sectionGroup name="authentication">
. До того, как я узнал об этом, я вытаскивал свои волосы из-за этого. Надеюсь, это кому-то поможет. Как только я поместил вышеуказанный код в файл webconfig, он работал в интрасети, он просто возвращал ошибки в моем локальном, но как только я добавил выше в свой локальный applicationhost.файл конфигурации, он начал работать на моем и местные тоже. Затем я вызвал следующую переменную, чтобы вернуть имя зарегистрированного пользователя в windows:
    HttpContext.Current.User.Identity.Name.ToString().Substring((HttpContext.Current.User.Identity.Name.ToString().IndexOf("\")) + 1);

Ура!


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

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

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

Как вы хотели, чтобы это было правильно, но вам нужно сначала настроить веб-сервер, ссылаясь на как сделать окно НТ авторизованы имя пользователя ASP.NET (первые шаги настройка веб-сервера).


попробовать С ниже код:

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";
    }
}

мне удалось решить эту проблему, следуя инструкциям здесь, в методе 1 по следующей ссылке - https://support.microsoft.com/en-us/help/896861/you-receive-error-401-1-when-you-browse-a-web-site-that-uses-integrate Короче говоря, отключите все методы проверки подлинности, кроме проверки подлинности Windows. Откройте regedit под учетной записью администратора, найдите HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0, щелкните правой кнопкой мыши узел и выберите Создать и выберите многострочное значение. Введите "BackConnectionHostNames" и нажмите Enter. Для значения введите веб-сайт, на котором вы пытаетесь установить доступ, и нажмите OK. перезапустить IIS Как только я это сделал, я смог получить текущего пользователя windows с помощью HttpContext.Ток.Пользователь.Личность.Имя, WindowsPrincipal (это.Запрос.LogonUserIdentity) также получил мне имя пользователя Windows, вошедшего в систему. Для справочной системы.Окружающая среда.Имя пользователя и системы.Безопасности.Основные.Класса windowsidentity.GetCurrent().Имя, оба эти еще дал пользователь IIS.

Это заняло у меня века, чтобы добраться до сути. Удачи с этим. IIS-это кошмар!