Ответ 1
Для делегирования необходимо доверять промежуточному серверу. В противном случае никакие полномочия не будут делегированы, а промежуточный сервер не может выдавать себя за оригинального клиента.
У меня возникли проблемы с вызовом веб-службы из веб-приложения, и я надеялся, что кто-то здесь сможет помочь. Из того, что я могу сказать, это, похоже, имеет отношение к проблеме Kerberos с двойной перестановкой. Однако, если это так, я не уверен, что делать, чтобы исправить эту проблему. Чтобы сделать все сложнее, у меня нет надлежащих прав на внесение изменений в учетные записи Active Directory, поэтому мне нужно знать, что нужно запрашивать при запросе изменений. В моей ситуации мне нужно передать учетные данные (Интегрированная проверка подлинности Windows) из веб-приложения на бэкэнд-веб-службу, чтобы веб-служба работала под правильным контекстом пользователя.
Вот моя точная проблема:
Это работает
Это не работает
Единственное различие между рабочим сценарием и нерабочим сценарием заключается в том, что рабочий сценарий запускает приложение на локальном хосте (будь то компьютер разработчика или на сервере), а нерабочий пример работает на другой машине, Код между обоими сценариями точно такой же.
Что я пробовал
setspn -a http/server1 DOMAIN\account
using(...)
и выполнение вызова веб-службы в качестве учетной записи пула приложений. Это работает как ожидалось.Есть ли у кого-нибудь идеи о том, что я могу сделать, чтобы исправить эту проблему?
Для делегирования необходимо доверять промежуточному серверу. В противном случае никакие полномочия не будут делегированы, а промежуточный сервер не может выдавать себя за оригинального клиента.
Чаще всего причина в том, что сервер 1 не передает токен делегирования на сервер 2. Поэтому, когда сервер 2 пытается использовать этот билет аутентификации для выхода в другое место (возможно, сервер SQL), он терпит неудачу.
Вы должны установить уровень олицетворения для вызова WCF
ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation