Как настроить делегирование в приложении ASP.Net Core 2.0 в Windows, когда пользователи проходят аутентификацию через Azure AD
Настройка:
У меня есть веб-приложение, написанное на ASP.NET Core 2.0, которое проходит проверку подлинности в Azure AD с использованием OpenID Connect. Он работает на компьютере, который является частью домена Azure AD. Приложение имеет приложение, настроенное в Azure AD.
Эта проблема:
Мы хотели бы использовать учетную запись пользователя Azure AD для подключения к базе данных SQL Server, которая находится на другом (Windows) компьютере. До сих пор я пытался использовать олицетворение для достижения этой цели.
Мне кажется, это является проблемой двойного прыжка, но ничего из того, что я пробовал, не сработало.
Заметки:
- Пользователи будут получать доступ к сайту через Интернет, вне домена, поэтому мы не можем полагаться на проверку подлинности Windows напрямую
- Работает аутентификация через OpenID Connect - я получаю ожидаемую информацию о пользователе и претензии
- Идентификационные данные претензий действительно соответствуют пользователю домена
- Я могу выдать себя за пользователя, получив WindowsIdentity, используя учетные данные для входа в систему (используя advapi32)
Что я пробовал:
- Используя S4UClient для получения WindowsIdentity - я могу получить WindowsIdentity, но он не делегирует.
- Настройка имен участников-служб для веб-сервера и процессов, включая создание учетной записи службы, под которой работает сайт.
- Назначение делегации Kerberos на машину
- Создание WindowsIdentity с использованием утверждения UPN - снова я получаю WindowsIdentity, но не могу подключиться к SQL Server.
- Запуск сайта с учетной записью SYSTEM (я знаю, что это не рекомендуется, но, похоже, все равно не работает, так что...)
- Настройка ограниченного делегирования Kerberos на сервер sql с веб-сервера
- Настройка веб-сайта на использование аутентификации Windows (с анонимной аутентификацией и без нее) и удаление всех провайдеров, кроме Negotiate.
- Возможно другие вещи, я буду обновлять, если / как я думаю о них.
Я готов начать обсуждение других вариантов с командой разработчиков базы данных, но выполнение этой работы упростит управление пользователями.
Есть мысли или предложения?
1 ответ
Это возможно, но есть ряд движущихся частей, которые все должны быть на месте, чтобы он работал. Вы можете посмотреть мой пост, чтобы проверить, все ли они на месте, и некоторые ссылки на справочные статьи. Он написан для asp.net core 1.1, работающего на net452, но с тех пор я обновил это приложение до core 2.0 на net462 и, кроме изменений в setup.cs, для аутентификации все работает.