2017-04-25 1 views
0

J'envoie une demande GET à un serveur qui attend l'authentification NTLM.Réponse non autorisée après la définition de CachePolicy avec HttpClient

Pour que nous avons mis UseDefaultCredentials = true

var defaultHandler = new WebRequestHandler 
{ 
    UseDefaultCredentials = true, 
    CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore), 
    AutomaticDecompression = DecompressionMethods.GZip, 
    AllowAutoRedirect = true, 
    UseCookies = true, 
    CookieContainer = new CookieContainer() 
}; 

Tout fonctionnait correctement jusqu'à ce que nous avons décidé de tourner le cache.

Pour cela nous avons changé notre CachePolicy-CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default)

Avec ce changement le serveur a commencé à répondre avec 401 - unauthorized et envoie aux côtés des WWW-Authenticate: NTLM

Toutes les idées pourquoi réglage du cache a changé le comportement?

Répondre

0

La cause racine du problème est que le serveur répondait avec

Cache-Control: private

Notre HttpClient a été mise en cache cette réponse et donc, l'étape de négociation suivante a été servi de Cache au lieu d'être demandé au Serveur résultant de l'échec de l'authentification.

Nous avons désactivé la mise en cache sur 401 réponses. Après beaucoup de lecture, nous avons décidé de mettre en œuvre comme Mozilla Developer Network États

Cache-Control: no-cache, no-store, must-revalidate