Делегация Asp.net
Я делаю.Net Web API, который получает данные, вызывая SQL-сервер. Пользователь проходит проверку подлинности через проверку подлинности Windows (Kerberos). Я хотел бы, чтобы учетные данные пользователя передавались на сервер SQL через делегирование, но сервер SQL видит анонимного пользователя.
Вот что я сделал:
Приложение IIS: включена аутентификация Windows и олицетворение asp.net. Анонимная проверка подлинности с помощью форм отключена Включить проверку подлинности в режиме ядра проверено. Провайдеры: переговоры, Kerberos. Использовать учетные данные пула приложений: True.
Пул приложений: управляемый конвейерный режим: классический. Идентичность: Сетевой сервис.
В AD компьютер, на котором работает веб-сервер, настроен на "Доверять этому компьютеру возможность делегирования какой-либо конкретной службе (только Kerberos)"
Строка подключения к серверу SQL содержит Integrated Security=SSPI;
Изменить: в моем web.config у меня есть
<system.web> <authentication mode="Windows" /> <identity impersonate="true" /> </system.web>
а также
<security> <authentication> <windowsAuthentication enabled="true"> <providers> <clear /> <add value="Negotiate" /> <add value="Kerberos" /> </providers> <extendedProtection tokenChecking="None" /> </windowsAuthentication> <anonymousAuthentication enabled="false" /> </authentication> </security>
- Общий HOST spn устанавливается для машины.
Из браузера я получаю доступ к веб-приложению через http://machinename.domain.net/.
Я ожидал бы в этой настройке, что мое приложение IIS выполняется под учетной записью компьютера?
Когда я отлавливаю запрос в отладчике на веб-сервере, я вижу, что WindowsIdentity.GetCurrent().Name - это учетная запись пользователя, просматривающего веб-приложение, а WindowsIdentity.GetCurrent().AuthenticationType имеет значение "Kerberos". Так что это должно быть хорошо.
Однако для WindowsIdentity.GetCurrent().ImpersonationLevel установлено только "Impersonate". Я ожидал, что будет установлено "Делегировать"?
Когда я делаю запрос к серверу SQL, я получаю "Ошибка входа в систему для пользователя NT AUTHORITY\ANONYMOUS LOGON", поэтому очевидно, что учетные данные пользователя не передаются на сервер SQL.
Я надеюсь, что кто-то может увидеть, что я делаю неправильно. Мне действительно нужен толчок в правильном направлении.
2 ответа
Для дальнейшего использования, если кто-то столкнется с той же проблемой: проблема заключалась в том, что мы попробовали Chrome. Это работает в IE, но в Chrome было необходимо изменение реестра, упомянутое в этом посте: делегирование Kerberos не работает в Chrome
Вы должны иметь возможность установить Аутентификацию на Олицетворение ASP.NET в IIS. Вероятно, вам потребуется установить следующее в вашем файле web.config, как часть раздела
<identity impersonate="true" />
Это может потребоваться в разделе
<validation validateIntegratedModeConfiguration="false" />