Мой руководитель в офисе говорит мне, что он видел демонстрацию с предварительной версией Microsoft «Женева» (теперь Windows Identity Foundation), где разработчик сделал следующее:
Он установил какое-то веб-приложение ASP.net, где пользователь может войти в систему, используя настроенную систему входа. За кулисами веб-приложение регистрирует пользователя как пользователя в Active Directory.
Пользователь входит в систему.
Как только пользователь вошел в систему, поток веб-приложений ASP.net запускается как вошедший в систему пользователь в течение сеанса пользователя и может получать доступ к ресурсам в сети (например, запускать запросы SQL для таблиц, чьи доступ контролируется Active Directory)
Шаги 2) и 3) в точности совпадают с использованием параметра «Встроенная проверка подлинности Windows» на вкладке «Безопасность каталога» настроек веб-сайта в IIS. Шаг 1) отличается тем, что мы используем настраиваемую систему входа в систему, а не аутентификацию Kerberos.
Мы хотим настроить одно из наших приложений для работы точно так, как описано в 1), 2) и 3). Однако вся документация, которую я видел относительно Windows Identify Foundation, касается Cardspace и Federated Security. Мы сейчас не заинтересованы в использовании любой из этих технологий.
Мы просто хотим, чтобы пользователи могли входить в учетные записи Active Directory за кулисами.
Да, мы опробовали ActiveDirectoryMembershipProvider
с Forms Authentication
, но это полный барьер для фактического доступа к ресурсам в сети, требующим олицетворения на каждой странице!
ОБНОВЛЕНИЕ 7 января 2010 года. Хорошо, я работал над этим некоторое время, и все, что мне удалось придумать, не соответствует тому, чего я хочу достичь. Возможно, нужной мне функциональности нет в версии WIF.
Вот где я сейчас. Я нашел некоторую документацию по MSDN, в которой указано, что в ASP.net используются три разных идентификатора: идентификатор, указанный в HttpContext.Current.User
, идентификатор, указанный в Thread.CurrentPrincipal
, и, наконец, идентификатор, указанный в WindowsIdentity.GetCurrent
. ссылка
В одном примере, где я хочу использовать процесс, который я ищу, я хочу выполнить SQL-запрос как зарегистрированный пользователь. В моем отладчике я вижу, что я легко устанавливаю пользователей HttpContext и Thread для вошедшего в систему пользователя. Однако когда я подключаюсь к серверу SQL с использованием аутентификации Windows, он всегда всегда подключается как пользователь WindowsIdentity.GetCurrent
, и этот пользователь всегда всегда является удостоверением процесса ASP.net, если только я не использую аутентификацию Windows с имитацией. Я абсолютно не могу использовать Аутентификацию Windows с моим приложением, потому что мои пользователи должны войти в систему, играя песню «Волшебная флейта», а аутентификация Windows не поддерживает вход в систему с песнями «Волшебная флейта».
Чтобы уточнить, нет проблем с получением WindowsIdentity
, представляющего вошедшего в систему пользователя (который вошел в систему с волшебной флейтой). Проблема в том, что я не могу использовать этот WindowsIdentity
для выполнения запросов SQL для моего пользователя.