Ответ 1
Вы должны установить режим аутентификации Windows
в своей конфигурации, а также отключить анонимных пользователей в теге авторизации.
У меня есть приложение 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.
Вы должны установить режим аутентификации Windows
в своей конфигурации, а также отключить анонимных пользователей в теге авторизации.
Чтобы получить зарегистрированного пользователя в учетной записи Windows, вы должны использовать Windows authentication
вместо Forms authentication
:
System.Security.Principal.WindowsIdentity.GetCurrent(). Name.Tostring() также работает только при запуске веб-сайта из визуальной студии, но после развертывание в IIS возвращает NT AUTHORITY\SYSTEM
Отображает текущего пользователя приложения. Когда вы размещаете свое приложение на веб-сервере Visual Studio, оно использует вашу локальную учетную запись. Однако, когда вы войдете в веб-приложение с разными учетными данными, он всегда будет показывать ваш текущий вход в Windows.
Приложение, развернутое в IIS, использует вашу учетную запись NT AUTHORITY\SYSTEM в вашем случае.
Я использую это:
System.Security.Principal.WindowsPrincipal user;
user = new WindowsPrincipal(this.Request.LogonUserIdentity);
this.Request.LogonUserIdentity.Impersonate();
user_name = user_name.Substring(user_name.LastIndexOf("\\") + 1);
Чтобы получить текущего пользователя в Windows на С#, используйте:
string Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
string strName = HttpContext.Current.User.Identity.Name.ToString();
как вы хотели, чтобы это было правильно, но вам нужно сначала настроить веб-сервер, ссылаясь на Как получить окно NT Logged User Name с помощью 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";
}
}
Я боролся и боролся и боролся с этим. Одна из вещей заключается в том, что у меня нет доступа к 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);
Ура!