Wie kann die Zwischenspeicherung von Anmeldeinformationen auf Windows.Web.Http.HttpClient beendet werden?
Ich habe ein Problem, bei dem eine App versucht, mit verschiedenen Authentifizierungsmethoden vom selben Server auf Ressourcen zuzugreifen. Die beiden Methoden sind:
Credentials (NTLM, Basic usw.)OAuth (Träger)Setup HttpBaseProtocolFilterDasHttpBaseProtocolFilter
ist eingestellt auf:
Cod
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache;
filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.MostRecent;
filter.AllowUI = false;
Adding Server CredentialWenn die Ressource Anmeldeinformationen benötigt, verwende ich:
filter.ServerCredential = new PasswordCredential(
RequestUri.ToString(),
UserName,
Password);
HttpClient httpClient = new HttpClient(filter);
Adding OAuth TokenWenn die Ressource einen Inhaber-Token benötigt, verwende ich:
HttpClient httpClient = new HttpClient(filter);
httpClient.DefaultRequestHeaders.Authorization = new HttpCredentialsHeaderValue("Bearer", token);
DasServerCredential
sind null
filter.ServerCredential = null
Antwort vom Server erhaltenusing(httpClient)
{
using(HttpRequestMessage requestMessage = new HttpRequestMessage(new HttpMethod(method), RequestUri))
{
using(HttpResponseMessage response = await httpClient.SendRequestAsync(requestMessage))
{
// Do something with response
}
}
}
Die AngelegenheiWenn dasHttpClient
request liefert 200 (OK) mitServerCredential
, dann jedes folgendeBearer
request gibt auch dann 200 (OK) zurück, wennBearer
Token ist ungültig undfilter.ServerCredential
ist Null
Es sieht so aus, als ob dasfilter.ServerCredential
wird zwischengespeichert und alle nachfolgenden Aufrufe werden mit den zwischengespeicherten Anmeldeinformationen authentifiziert.
Ich muss die App neu starten, wenn ich ein @ machen möchBearer
Authentifizierung
Wie kann ich das @ entfernen, deaktivieren oder löscheServerCredential
des Windows.Web.Http.HttpClient?
Things ich habe versucht:
Alle Cookies löschenvar cookieManager = filter.CookieManager;
HttpCookieCollection myCookieJar = cookieManager.GetCookies(RequestUri);
foreach (HttpCookie cookie in myCookieJar)
{
cookieManager.DeleteCookie(cookie);
}
DasmyCookieJar
ist leer
PasswordCredentialPropertyStore
Windows.Security.Credentials.PasswordCredentialPropertyStore credentialPropertyStore = new Windows.Security.Credentials.PasswordCredentialPropertyStore();
DascredentialPropertyStore
ist leer
UN
PasswordCredentialPropertyStore
's Methode Löschen ist für den internen Gebrauch reserviert und nicht zur Verwendung in Ihrem Code vorgesehen.
Irgendwelche Ideen