Проблема олицетворения ASP.NET (часть 2) - PullRequest
5 голосов
/ 18 мая 2011

Это продолжение предыдущего сообщения о невозможности олицетворения текущего пользователя 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 Authorization Rules

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

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

enter image description here

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

Basic Settings

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

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

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

А в IIS вам понадобитсяAsp.net олицетворение включено, а также включена проверка подлинности Windows, остальные должны быть отключены.И в Аутентификации Windows, перейдите к Расширенным настройкам и ОТКЛЮЧИТЕ Включить аутентификацию в режиме ядра.Это должно сделать это.Теперь ваш сайт должен быть настроен для приложений локальной интрасети, и любое из следующих действий будет работать

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

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

1 голос
/ 19 мая 2011

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

Ссылка MSDN

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

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

Смежные вопросы SO

0 голосов
/ 20 мая 2011

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

HttpContext.Current.User.Identity.Name ?
...