Jaki mechanizm uwierzytelniania chroni serwis internetowy? Poświadczenia ustawione na HttpWebRequest
będą przekazywane tylko przez nagłówek HTTP Authorization
przez Basic, Digest lub NTLM. Tak więc, jeśli twoja usługa internetowa jest chroniona przez WS-Security
, prawdopodobnie NetworkCredentials
nie zostanie w ogóle przekazany do schematu uwierzytelniania, ponieważ WS-Security
nie działa na poziomie HTTP.
Co należy zrobić, to utworzyć proxy klienta usług sieci Web dla usługi WWW za pomocą narzędzia wiersza polecenia wsdl.exe
lub czegoś podobnego. Umożliwi to dostęp do świadomych schematów uwierzytelniania usługi Web Service.
Aktualizacja po komentarzach:
Wydaje się HttpWebRequest
potrzeb otrzymywać wyzwanie WWW-Authenticate
z 401 Unauthorized
zanim może uwierzytelnić właściwie przez SSL. Domyślam się, że istnieją dwie oddzielne ścieżki kodu w HttpWebRequests
obsługujące zwykły ruch HTTP i szyfrowany ruch HTTPS. W każdym razie, co należy spróbować, to:
- Execute nieuwierzytelnionego
HttpWebRequest
do https://.../
URI.
- Otrzymaj odpowiedź
401 Unauthorized
.
- Wykonaj to samo żądanie, teraz z zestawem
Credentials
(nie jestem pewien, czy PreAuthenticate
powinien być true
lub false
, przetestuj oba).
- Powinieneś teraz uzyskać
200 OK
lub cokolwiek odpowiada na twoją usługę sieciową.
Inną opcją jest stworzenie nagłówka Authorization
się na początkowym życzenie:
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);
Ten pracował dla ja, dzięki. –