Мой руководитель в офисе сказал мне, что видел демонстрацию предварительной версии Microsoft «Geneva» (теперь Windows Identity Foundation), где разработчик сделал следующее:
Он создал какое-то веб-приложение ASP.net, в котором пользователь мог войти в систему, используя настраиваемую систему входа. За кулисами веб-приложение регистрирует пользователя как пользователя в Active Directory.
Пользователь входит в систему.
После того, как пользователь вошел в систему, поток веб-приложения ASP.net запускается от имени вошедшего в систему пользователя в течение всего сеанса пользователя и может получать доступ к ресурсам в сети (например, выполнять SQL-запросы к таблицам, доступ к которым контролируется Active Directory).
Шаги 2) и 3) точно такие же, как при использовании параметра «Встроенная проверка подлинности Windows» на вкладке «Безопасность каталога» настроек веб-сайта в IIS. Шаг 1) отличается тем, что мы используем настраиваемую систему входа в систему, а не аутентификацию Kerberos.
Мы хотим настроить одно из наших приложений так, чтобы оно работало точно так, как описано в пунктах 1), 2) и 3). Тем не менее, вся документация, которую я видел по Windows Identification 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-запросов для моего пользователя.