Олицетворение идентичности с ASP.NET 4 MVC не работает должным образом
Я нахожусь в процессе создания приложения Intranet MVC 4 для наших аналитиков. Цель состоит в том, чтобы предоставить внутренним пользователям доступ к этому приложению без необходимости входа в систему, поскольку они являются частью нашей внутренней сети. Когда они получают доступ к приложению, я хочу иметь возможность захватить их имя пользователя Windows и проверить активный каталог с помощью LDAP, получить отдел, к которому они принадлежат, и отобразить соответствующие данные на экране. Основываясь на рекомендациях различных форумов, я выбрал проверку подлинности Windows для этого приложения и смог протестировать приложение, успешно запущенное из Visual Studio. Проблема, с которой я сталкиваюсь, заключается в развертывании этого на нашем сервере UAT под управлением IIS 7.5.
<authentication mode="Windows">
</authentication>
<identity impersonate="false" />
Это текущее состояние моего файла Web.config. Независимо от того, является ли олицетворение истинным или ложным, приложение, кажется, не захватывает имя пользователя Windows браузера, из которого осуществляется доступ к приложению. Является
имитировать = верно
требуется для этого вообще? В приветственном сообщении на главной странице я всегда вижу имя пользователя Windows компьютера, на котором размещено приложение / работает IIS. Я пробовал самые разные способы получения имени пользователя Windows из входящего запроса пользователя.
string name = System.Web.HttpContext.Current.User.Identity.Name;
string name = System.Web.HttpContext.Current.Request.LogonUserIdentity.Name;
string name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
string name = System.Web.HttpContext.Current.Request.ServerVariables["LOGON_USER"].Name;
и т.д. Я также посмотрел несколько других сообщений здесь, как это. Но я не могу заставить его работать. Я боюсь, что я пытаюсь достичь этого случайно, а не по-настоящему понять, что происходит? Может ли кто-нибудь, пожалуйста, направить меня в правильном направлении?
1 ответ
Нет, вы неправильно понимаете цель подражания.
Во-первых, олицетворение больше не поддерживается в IIS 7 или более поздней версии в интегрированном режиме.
Во-вторых, цель олицетворения состоит в том, чтобы изменить "пользователя", под которым работает рабочий процесс во время выполнения, особенно для предоставления доступа к ресурсам файловой системы или базы данных от имени этого пользователя. Он не имеет ничего общего с аутентификацией в целом и не особенно полезен для большинства веб-приложений.
Вы хотите использовать аутентификацию Windows, однако вы должны знать, что это будет работать только с Internet Explorer. Он также будет работать только с серверами, которые подключены к вашему домену, и не имеют никаких промежуточных проблем аутентификации Kerberos. (они часто известны как проблемы "двойного прыжка"). Другие браузеры по умолчанию не предоставляют информацию об учетной записи Active Directory автоматически, хотя некоторые из них могут быть настроены так, а другие нет.
Если вы используете правильно настроенный сервер с аутентификацией Windows и используете браузер, который поддерживает прохождение билетов ActiveDirectory Kerberos, и нет проблем с сетью, которые могли бы вызвать проблемы с этим прохождением, то вы можете использовать HttpContext.Current.User.Identity.Name
чтобы получить имя пользователя.
Не используйте LogonName или что-то в этом роде, так как это даст вам рабочий процесс, а не имя аутентифицированного пользователя.