Как получить текущую учетную запись 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-это кошмар!