Подтвердить что ты не робот

Как я могу исправить проблему с двойным хопом Kerberos?

У меня возникли проблемы с вызовом веб-службы из веб-приложения, и я надеялся, что кто-то здесь сможет помочь. Из того, что я могу сказать, это, похоже, имеет отношение к проблеме Kerberos с двойной перестановкой. Однако, если это так, я не уверен, что делать, чтобы исправить эту проблему. Чтобы сделать все сложнее, у меня нет надлежащих прав на внесение изменений в учетные записи Active Directory, поэтому мне нужно знать, что нужно запрашивать при запросе изменений. В моей ситуации мне нужно передать учетные данные (Интегрированная проверка подлинности Windows) из веб-приложения на бэкэнд-веб-службу, чтобы веб-служба работала под правильным контекстом пользователя.

Вот моя точная проблема:

Это работает

Working scenario

Это не работает

Non-working scenario

Единственное различие между рабочим сценарием и нерабочим сценарием заключается в том, что рабочий сценарий запускает приложение на локальном хосте (будь то компьютер разработчика или на сервере), а нерабочий пример работает на другой машине, Код между обоими сценариями точно такой же.

Что я пробовал

  • Добавление SPN к учетной записи домена, которая запускает пул приложений для каждого сервера setspn -a http/server1 DOMAIN\account
  • Различные способы олицетворения
  • Удаление кода олицетворения using(...) и выполнение вызова веб-службы в качестве учетной записи пула приложений. Это работает как ожидалось.

Есть ли у кого-нибудь идеи о том, что я могу сделать, чтобы исправить эту проблему?

4b9b3361

Ответ 1

Для делегирования необходимо доверять промежуточному серверу. В противном случае никакие полномочия не будут делегированы, а промежуточный сервер не может выдавать себя за оригинального клиента.

Ответ 2

Чаще всего причина в том, что сервер 1 не передает токен делегирования на сервер 2. Поэтому, когда сервер 2 пытается использовать этот билет аутентификации для выхода в другое место (возможно, сервер SQL), он терпит неудачу.

Вы должны установить уровень олицетворения для вызова WCF

ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation

http://msdn.microsoft.com/en-us/library/system.servicemodel.security.windowsclientcredential.allowedimpersonationlevel.aspx