2017-06-06 1 views
1

je le code suivant qui se connecte avec succès à une API tiers en C#:401 non autorisée lors de la connexion à l'API par Azure Traffic Manager en C#

using (var client = new WebClient()) 
{ 
    client.Credentials = new NetworkCredential(login.Username, login.Password); 

    var xml = client.DownloadString(url); 
    Debug.Write(xml); 
} 

Cela fonctionne bien lors de la connexion directement à l'API. Cependant, j'essaie d'utiliser Azure Traffic Manager pour répartir la charge sur plusieurs points de terminaison, et je reçois 401 exceptions non autorisées en procédant ainsi. Il semble fonctionner correctement en utilisant des outils comme Postman et en configurant Basic Auth dans la requête.

J'ai essayé de convertir le code en RestSharp mais il semble avoir les mêmes symptômes.

Voici la demande de Fiddler en utilisant quelques techniques différentes:

C#/WebClient directement vers le point final de l'API (succès)

GET <ApiUrl> HTTP/1.1 
Host: <ApiHost> 
Connection: Keep-Alive 

401 Unauthorized 

GET <ApiUrl> HTTP/1.1 
Authorization: Basic <AuthToken> 
Host: <ApiHost> 

C#/WebClient Azure Traffic Manager (401 non autorisé)

GET <TrafficManagerApiUrl> HTTP/1.1 
Host: <TrafficManagerApiHost> 

401 Unauthorized 

GET <ApiUrl> HTTP/1.1 
Host: <ApiHost> 

Postman Azure Traffic Manager (succès)

GET <TrafficManagerApiUrl> HTTP/1.1 
Host: <TrafficManagerApiHost> 
Connection: keep-alive 
Authorization: Basic <AuthToken> 
Cache-Control: no-cache 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 
Postman-Token: 13396800-33ab-8d7b-664f-68b99e8f4ac1 
Accept: */* 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 


302 Redirect 

GET <ApiUrl> HTTP/1.1 
Host: <ApiHost> 
Connection: keep-alive 
Authorization: Basic <AuthToken> 
Cache-Control: no-cache 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 
Postman-Token: 13396800-33ab-8d7b-664f-68b99e8f4ac1 
Accept: */* 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: JSESSIONID=<jsessionid> 
+1

Pouvez-vous saisir les requêtes sortantes en utilisant Fiddler et les par exemple comparer aux demandes de Postman avec succès? – NWard

+0

@Now ajouté. Si je devais faire une supposition, lorsque j'utilise C#/WebClient via le gestionnaire de trafic, il essaie de s'authentifier sur un hôte différent de l'original. Il semble que Postman envoie avec empressement l'en-tête Authorization dans la demande initiale. –

Répondre