Делегация 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" />
Другие вопросы по тегам