Аутентификация формы на основе активного каталога без членства в asp

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

Ближайший код, который я нашел, от Microsoft:

Как пройти аутентификацию в Active Directory с помощью аутентификации с помощью форм и Visual Basic .NET

Поскольку я использую IIS8, ASP 4.5, код не работает в web.config, ссылаясь на

       <identity impersonate="true" />


HTTP Error 500.24 - Internal Server Error

An ASP.NET setting has been detected that does not apply in 
Integrated managed pipeline mode.

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

При дальнейшем копании кажется, что я не смогу использовать этот код, поскольку он не поддерживает режим управляемого конвейера. Я не хочу использовать членство asp как использование доменных групп для аутентификации прав.

Помощь!

Хочу сохранить интегрированный управляемый канал и использую олицетворение ASP.Net, чтобы я мог использовать аутентифицированного пользователя объявления для аутентификации в базе данных sql.


person nickand    schedule 15.09.2014    source источник
comment
Мне не совсем понятно, чего вы пытаетесь достичь. Олицетворение обычно используется только тогда, когда вам нужно запустить рабочий процесс IIS в качестве учетных данных пользователя (например, если вы хотите получить доступ к сетевым ресурсам от имени этого пользователя). Как правило, это не рекомендуется, если в этом нет крайней необходимости. Можете ли вы объяснить больше о своих требованиях... получить список групп, чтобы определить, к какой базе данных подключаться, довольно расплывчато..   -  person Erik Funkenbusch    schedule 16.09.2014
comment
@nick, а вы не можете использовать аутентификацию Windows вместо аутентификации Forms? Затем выполните поиск в System.DirectoryServices, используя Page.User.Identity   -  person Reg Edit    schedule 16.09.2014
comment
Я использую аутентификацию Windows, так как это приложение для интрасети, но мне нужно сделать его доступным в Интернете, поэтому я смотрю на аутентификацию формы, чтобы получить пользователя Windows.   -  person nickand    schedule 16.09.2014


Ответы (2)


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

Один из способов сделать то, что вы хотите, — использовать WindowsImpersonationContext. Предполагая, что вы используете проверку подлинности Windows:

WindowsIdentity id = (WindowsIdentity)Context.User.Identity;

// impersonation is automatically undone by
// WindowsImpersonationContext.Dispose()
using (WindowsImpersonationContext wic = id.Impersonate())
{
    // log into your database, do your queries, then cleanup
}

Недостатком здесь является то, что вы не можете просто оставить соединения открытыми на время ответа или дольше ... что, вероятно, хорошо ... вам нужно очистить код базы данных перед выходом из инструкции использования.

Примечание. Рабочий процесс должен иметь права выдавать себя за других пользователей, иначе это не сработает.

person Erik Funkenbusch    schedule 16.09.2014

Режим управляемого конвейера задается для каждого пула приложений в IIS. По умолчанию установлен интегрированный режим.

Вы можете изменить его на классический режим. Режим задается с помощью диалогового окна «Редактировать пул приложений», которое открывается, если щелкнуть правой кнопкой мыши пул приложений в диспетчере IIS и выбрать «Основные настройки»:

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

Если вам нужно узнать, какой пул приложений использует ваш сайт, загляните в Дополнительные настройки сайта.

person Reg Edit    schedule 15.09.2014
comment
Извините, я должен был сказать, что мне нужен интегрированный режим. - person nickand; 16.09.2014
comment
Рекомендовать классический режим для новых приложений — не лучший выбор, так как классический режим, скорее всего, исчезнет в будущих версиях IIS. Лучше всего разрабатывать новые приложения в интегрированном режиме. - person Erik Funkenbusch; 16.09.2014