Quel type de mécanisme d'authentification protège le service Web? Les informations d'identification définies sur HttpWebRequest
seront uniquement transmises via l'en-tête HTTP Authorization
via Basic, Digest ou NTLM. Ainsi, si votre service Web est protégé avec WS-Security
, le NetworkCredentials
ne sera probablement pas transmis au schéma d'authentification, car WS-Security
ne fonctionne pas au niveau HTTP.
Ce que vous devez faire est de créer un proxy client Web Service pour le service Web via l'outil de ligne de commande wsdl.exe
ou similaire. Cela vous donnera accès à des schémas d'authentification sensibles au service Web.
Mise à jour après les commentaires:
Il semble que HttpWebRequest
doit recevoir le défi WWW-Authenticate
avec un 401 Unauthorized
avant de pouvoir authentifier correctement via SSL. Je suppose qu'il existe deux chemins de code distincts dans HttpWebRequests
qui traitent le trafic HTTP normal et le trafic HTTPS crypté. Quoi qu'il en soit, ce que vous devriez essayer, est la suivante:
- exécuter un
HttpWebRequest
non authentifié à l'URI https://.../
.
- Recevez la réponse
401 Unauthorized
.
- Exécuter la même demande, maintenant avec les deux
Credentials
ensemble (pas sûr si PreAuthenticate
devrait être true
ou false
; tester les deux).
- Vous devriez maintenant obtenir
200 OK
ou quel que soit votre service Web.
Une autre option est de construire l'en-tête Authorization
vous-même sur la demande initiale:
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);
Cela a fonctionné pour moi, merci. –