Ошибка 407 при вызове веб-службы WCF через прокси-сервер с проверкой подлинности Windows - PullRequest
0 голосов
/ 29 июня 2010

У меня есть следующие настройки:

  1. Серверный компьютер, на котором запущена служба WCF, предоставляемая через приложение IIS, для которого требуется проверка подлинности Windows.
  2. Прокси-сервер (Squid), требующий аутентификацию Windows.
  3. Клиентский компьютер, на котором запущена служба Windows, которая пытается подключиться к службе WCF через прокси-сервер. Служба установлена ​​с учетными данными домена.

Все машины находятся в одном домене. Если я удаляю прокси из настройки и устанавливаю только следующие свойства привязки безопасности клиента, все работает хорошо:

  1. SecurityMode = TransportCredentialOnly
  2. Transport.ClientCredentialType = Windows

Соединение установлено успешно, и правильные учетные данные переданы на сервер.

Если я добавляю прокси-сервер, но на прокси-сервере удаляю требуемую аутентификацию Windows, все тоже работает нормально. Единственная настройка, которую я изменяю здесь для привязки безопасности:

ProxyAddress = http://myproxyserver:3128

Я вижу, что звонки проходят через прокси-сервер с правильными учетными данными.

Проблема в том, что когда я устанавливаю требование проверки подлинности Windows на прокси-сервере, прокси-сервер возвращает ошибку 407. Когда я проверяю файлы журнала, я вижу, что нет второй попытки ответить на ошибку 407 с правильными учетными данными. Настройка, которую я добавляю:

Transport.ProxyCredentialType = Windows

Вещи, которые я пытался и не работал:

  1. Установить UseDefaultProxy - поскольку это служба Windows, она не принимает прокси по умолчанию.
  2. Устанавливать учетные данные Windows вручную в ClientCredentials.Windows (включая домен).
  3. Добавить прокси по умолчанию в app.config и machine.config.

Есть идеи, что происходит и как это исправить?

1 Ответ

0 голосов
/ 30 июня 2010

Две вещи, которые могут быть проблемой.Во-первых, и я не могу быть уверен в этом, так как я не пытался использовать учетные данные Windows с TransportCredentialOnly,, это то, что безопасность транспорта имеет тенденцию быть двухточечной.Это означает, что промежуточный сервис, такой как прокси-сервер, должен будет аутентифицировать ваши транспортные учетные данные, а также восстановить соответствующие учетные данные для повторения вашего запроса к реальной конечной точке.Опять же, я не уверен, как это работает с учетными данными Windows ... но, учитывая, что это параметр безопасности транспортного уровня, я сомневаюсь, что он может проходить через прокси-сервер без дополнительной настройки, чтобы прокси-сервер повторял соответствующие учетные данные,(Имейте в виду, что это эффективно сводит на нет вашу безопасность на прокси-сервере ... что в управляемом параметре не является проблемой, но может иметь место в реальном сценарии.)

Во-вторых, transportДочерний элемент элемента security для вашей конфигурации привязки должен иметь настройку proxyCredentialType.Если ваш прокси-сервер мешает вашей безопасности, вам может потребоваться пройти аутентификацию на самом прокси-сервере.Параметр proxyCredentialType определяет, какие учетные данные прокси-сервера использовать для аутентификации на самом прокси-сервере.Затем вам необходимо будет предоставить учетные данные прокси-сервера, прежде чем отправлять свое сообщение.

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