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