Назад |
Перейти на главную страницу
Как настроить делегирование в приложении 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, но он не делегирует.
- Установка имен SPN для веб-сервера и процессов, включая создание учетной записи службы, под которой работает сайт.
- Назначение делегирования Kerberos машине
- Создание WindowsIdentity с использованием утверждения UPN - я снова получаю WindowsIdentity, но не могу подключиться к SQL Server.
- Запуск сайта с учетной записью SYSTEM (я знаю, что это не рекомендуется, но, похоже, это все равно не работает, поэтому ...)
- Установка ограниченного делегирования Kerberos на сервер sql с веб-сервера
- Настройка веб-сайта для использования проверки подлинности Windows (с анонимной аутентификацией и без нее) и удаление всех поставщиков, кроме Negotiate.
- Возможно другие вещи, я обновлю, если / когда я думаю о них.
Я почти готов начать обсуждение других вариантов с командой базы данных, но выполнение этой работы упростит управление пользователями.
Есть мысли или предложения?
Это возможно, но есть ряд движущихся частей, которые все должен быть на месте, чтобы он работал. Ты можешь видеть мой пост для вещей, чтобы проверить, что они все на месте, и несколько ссылок на справочные статьи. Он написан для asp.net core 1.1, работающего на net452, но с тех пор я обновил это приложение до core 2.0 на net462, и кроме изменений setup.cs для аутентификации, все по-прежнему работает.