Проблема олицетворения ASP.NET (часть 2)

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

ПРОБЛЕМА: мне нужно, чтобы ASP.NET олицетворял текущего вошедшего в систему пользователя. Когда я работаю под IIS 7.5, это не работает. IIS Express работает нормально, но я считаю, что это связано с тем, что сеанс отладки выполняется под моим идентификатором пользователя.

Я использую Environment.Username, чтобы определить, кто этот пользователь. Было высказано предположение, что это свойство всегда возвращает имя пользователя, вошедшего в систему, но по результатам моего тестирования оно возвращает олицетворенного пользователя из IIS.

Например, если в моем web.config…

    <identity impersonate="true" />

Когда я использую IIS 7.5 с этим параметром, Environment.Username возвращает IUSR. Я считаю, что это анонимная учетная запись пользователя IIS.

Если я изменю web.config на…

    <identity impersonate="true" userName="domain\jlivermore" password="mypassword" />

… Тогда Environment.Username возвращает jlivemore. Однако мне нужно, чтобы он возвращал jlivermore без явной установки его в web.config.

Вот мои настройки IIS…

Правила авторизации .NET . Правила авторизации .NET

Аутентификация Аутентификация

Один вопрос: если я отключу анонимную аутентификацию, мне будет предложено войти на сайт. Я думал, если бы вы вошли в систему с учетной записью Active Directory в домене, тогда эта проблема не возникла бы? Даже если я введу свое имя пользователя / пароль в эту подсказку, я все равно не получу работу олицетворения.

введите описание изображения здесь

Основные настройки

Основные настройки


person John Livermore    schedule 18.05.2011    source источник


Ответы (3)


Я не уверен, что вы нашли ответ, но если у кого-то возникнут проблемы с ним, вам понадобится следующее в вашем файле web.config

<authentication mode="Windows"/>
<identity impersonate="true"/>

И в IIS вам понадобится активная олицетворение Asp.net, а также включена проверка подлинности Windows, остальные должны быть отключены. А в Windows Authentication перейдите в Advanced Settings и СНИМИТЕ Включить аутентификацию в режиме ядра. Это должно сработать. Теперь ваш сайт должен быть настроен для приложений локальной интрасети, и вы можете использовать любое из следующих действий.

System.Security.Principal.WindowsIdentity.GetCurrent().Username()
HttpContext.Current.User.Identity.Name
System.Threading.Thread.CurrentPrincipal.Identity.Name

Но использование Environment.Username вернет только имя сервера, надеюсь, это поможет любому, кто борется с этим.

person Ben Petersen    schedule 04.08.2011

У меня была аналогичная проблема, как вы описываете. Основная проблема в том, что есть разница между олицетворением и делегированием. Я просто понимаю, что олицетворение будет работать, когда клиент и сервер находятся на одной машине. Однако, если клиент находится на другом компьютере, вам потребуется делегирование.

Справочник MSDN

В чем разница между олицетворением и делегированием?

Олицетворение передает идентификационные данные исходного вызывающего абонента внутренним ресурсам на том же компьютере. Делегирование передает исходную идентификацию вызывающего абонента внутренним ресурсам на компьютерах, отличных от компьютера, на котором запущена служба.

Связанные вопросы SO

person Ahmad    schedule 19.05.2011

Вы пробовали использовать

HttpContext.Current.User.Identity.Name ?
person mathieu    schedule 20.05.2011
comment
Да, это возвращает то же имя, что и Environment.Username. - person John Livermore; 21.05.2011