Какой механизм аутентификации защищает веб-сервис? Учетные данные, установленные на HttpWebRequest
, будут передаваться только через HTTP-заголовок Authorization
через Basic , Дайджест или NTLM . Таким образом, если ваша веб-служба защищена с помощью WS-Security
, NetworkCredentials
, вероятно, вообще не будет передан в схему аутентификации, поскольку WS-Security
не работает на уровне HTTP.
Что вам нужно сделать, это создать прокси-клиент веб-службы для веб-службы с помощью инструмента командной строки wsdl.exe
или чего-то подобного. Это даст вам доступ к схемам аутентификации с поддержкой веб-служб.
Обновление после комментариев:
Похоже, что HttpWebRequest
необходимо получить вызов WWW-Authenticate
с 401 Unauthorized
, прежде чем он сможет правильно пройти аутентификацию по SSL. Я предполагаю, что в HttpWebRequests
есть два отдельных пути кода, обрабатывающих обычный HTTP-трафик и зашифрованный HTTPS-трафик. В любом случае, что вы должны попробовать, это:
- Выполнить проверку подлинности
HttpWebRequest
для https://.../
URI.
- Получите ответ
401 Unauthorized
.
- Выполните один и тот же запрос, теперь с обоими установленными
Credentials
(не уверен, должно ли PreAuthenticate
быть true
или false
; проверить оба).
- Теперь вы должны получить
200 OK
или что-то еще, с чем ваш веб-сервис отвечает.
Другой вариант - создать заголовок Authorization
самостоятельно по первоначальному запросу:
string credentials = String.Format("{0}:{1}", username, password);
byte[] bytes = Encoding.ASCII.GetBytes(credentials);
string base64 = Convert.ToBase64String(bytes);
string authorization = String.Concat("Basic ", base64);
request.Headers.Add("Authorization", authorization);