Как аутентифицировать .NET2 Webservice с помощью SQUID-прокси - PullRequest
2 голосов
/ 14 июля 2010

У меня есть небольшая утилита, которая является клиентом SOAP WebService. SOAP-прокси генерируется из WSDL. Работало нормально.

Теперь клиент хочет использовать прокси-сервер SQUID, но он отказывается аутентифицировать мой SOAP-клиент.

Я уже пробовал:

 MyWebservice ws = new MyWebservice();
 // set URL etc.
 // login for the actual service, this part works
 HeaderLogin hl = new HeaderLogin();
 hl.username = svcLogin;
 hl.password = svcPassword;
 ws.HeaderLoginValue = hl;

 // setting up the Proxy of the Proxy
 //ws.Proxy = System.Net.WebRequest.GetSystemWebProxy();
 ws.Proxy = System.Net.WebRequest.DefaultWebProxy;

 //ws.Proxy.Credentials = CredentialCache.DefaultCredentials;                
 ws.Proxy.Credentials = new NetworkCredential(proxyUser, proxyPassword, proxyDomain);

Но я получаю ошибку HTTP 407. Требуется проверка подлинности прокси.

SQUID (squid / 2.7.STABLE4) настроен на использование NTLM и AD для аутентификации. Кажется, это работает нормально: есть другие клиенты WebService, которые проходят через Прокси, все в порядке.

У меня нет прямого доступа к сайту, но есть только несколько лог-файлов для просмотра. Наиболее примечательным является то, что я вижу в файлах PCAP (Wireshark). Когда я создаю NetworkCredential с userName = "Henk", domain = "TEST", он отображается в PCAP как

... HTTP CONNECT someurl: 443 HTTP / 1.1, NTLMSSP_AUTH, пользователь: T \ H

А когда я смотрю на PCAP для работающего сервиса

... HTTP CONNECT someurl: 443 HTTP / 1.0, NTLMSSP_AUTH, пользователь: TEST \ Henk

А в SQUID acces.log все попытки отображаются как:

... 0 192.168.15.95 TCP_DENIED / 407 1759 ПОДКЛЮЧИТЬ someurl: 443 - НЕТ / - text / html
... 32 192.168.15.95 TCP_DENIED / 407 2055 CONNECT someurl: 443 - НЕТ / - text / html
... 31 192.168.15.95 TCP_DENIED / 407 1759 СОЕДИНИТЬ someurl: 443 - НЕТ / - text / html

Конкретные вопросы:

  • Известны ли какие-либо проблемы с .NET2 SOAP и Squid?
  • значимо ли отображение TEST \ Henk как T \ H?
  • что-нибудь еще, что я должен искать?

Ответы [ 4 ]

4 голосов
/ 22 июля 2010

Возможно, что подключение NTLM перезапускается до завершения подключения, что приводит к новому / второму анонимному запросу на подключение и ошибке 407.

Попробуйте переопределить метод GetWebRequest (Uri uri) и установите для свойства KeepAlive значение false.

Отредактируйте файл Reference.cs следующим образом:

protected override WebRequest GetWebRequest(Uri uri)
{
   HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
   webRequest.KeepAlive = false;
   return webRequest;
}

Просто помните, что обновление веб-ссылки приведет к тому, что Visual Studio сгенерирует файл, и вам потребуется изменить файл снова.

2 голосов
/ 19 июля 2010

T \ H может указывать на то, что в качестве строки ASCII используется строка Unicode. Так как символы Unicode - это два байта (наиболее распространенный случай в Windows), если вы интерпретируете их как ASCII, вы получите реальный символ и нулевой терминатор.

Я бы не ожидал увидеть такую ​​ошибку в приложении .NET, но вы никогда не узнаете.

0 голосов
/ 23 июля 2010

вы можете попробовать добавить "http_access allow" к домену в вашей конфигурации squid

0 голосов
/ 21 июля 2010

Я вижу, что журнал squid показывает, что доступ запрещен к someurl: 443 ... порт 443 является портом безопасного канала (SSL).В обычной практике веб-сервисы, размещенные на SSL, требуют некоторой аутентификации.пожалуйста, проверьте требования к учетным данным веб-службы.вам может потребоваться передать учетные данные или подтвердить свою подлинность в качестве действующего клиента с помощью сертификата.

...