Frage

Ich arbeite an einer restbasierten App, die sich mit Office365 verbindet. Die App ist auf mehreren Plattformen verfügbar, sodass ich eine tragbare Klassenbibliothek erstellt habe, um die gesamte Logik, einschließlich der Authentifizierung, zu behandeln. Das PCL zielt auf Windows Phone 7.1 und an und enthält die Microsoft HTTP-Clientbibliotheken (Nuget), die für Windows Phone 7.1-Apps erforderlich ist.

Der letzte Schritt der Authentifizierung für Office365 ist, ein FedAuth-Cookie vom Standort zu erhalten, und hier habe ich ein Problem.

Der Code, den ich um den Cookie zu bekommen, ist:

generasacodicetagpre.

Die "Host" -Variable ist nur die URL des Office365-Standorts, und die BinarySecurityToken, die ich aus vorherigen Anfragen bekam. Diese Dinge arbeiten in allen Apps gleichermaßen gut, ob ich den PCL-Code aus dem Kontext einer Windows Phone 7.1-App, der Windows Phone 8-App, der Windows 8-App oder sogar einer Konsolenanwendung ausführen, ich bekomme genau die gleiche Antwort (siehe unten), die den Fedauth-Keks enthält. Dies habe ich mit Fiddler verifiziert.

Dann versuche ich, den Cookie zu bekommen, um es auf nachfolgenden Anfragen wiederzuverwenden.

generasacodicetagpre.

Dies führt zu dem folgenden Ergebnis: Bei Windows Phone 7.1 enthält die Variable 'Cookiecollection' nur den Cookie RTFA '. Auf den anderen Plattformen enthält es alle drei Cookies 'RPScontextCookie', 'RTFA', 'Fededauth'.

Windows Phone 7.1 unterscheidet sich von den anderen Apps, da dies die einzige Plattform ist, die tatsächlich den HTTPClient aus dem Nuget-Paket verwendet. Die anderen Plattformen haben einen nativen HttpClient, der von der Magie von PCL eingetauscht wird.

Es scheint wahrscheinlich, dass das Problem durch den FedAuth-Cookie verursacht wird, der keine Domäne hat. Ich habe versucht,. GETAUKOOKIES (NULL) und verschiedene Variationen von .glaokies (neuer URI ("Etwas", urikind.rele)), das alles in einer Ausnahme führt. Ich habe auch versucht, die meisten Eigenschaften des httpClienthandlers ohne Glück zu ändern.

Hat jemand dieses Problem aufgetreten und vielleicht gelöst? Oder nur ein Vorschlag für das, was ich versuchen könnte?

Die Antwort, die ich auf der oben genannten .Postasync bekomme, ist auf allen Plattformen gleich, und laut Fiddler lautet die Rohantwort:

generasacodicetagpre.

War es hilfreich?

Lösung

Ich habe hier eine Antwort gefunden: Zugriff auf httponly Cookies von Windows Phone 8 / PCL .

Lesen des Beitrags, den ich erkannt habe, dass ich oben einen Fehler gemacht habe: Ich habe den Cookie 'RTFA' in der Windows Phone 7.1-App nicht erhalten, sondern der 'RPSCONTEXTCOOKIE'. Die Cookies, die ich nicht zugreifen konnte, waren beide mit httponly markiert.

Ich erkannte auch, dass ich nicht direkt auf die Kekse zugreifen muss. Stattdessen konnte ich den Handler einfach wiederverwenden.cookiecontainer. So sieht mein Code jetzt so aus:

generasacodicetagpre.

this._cookiecontainer ist nur ein klassifisches Gebiet für die Lagerung des Cookie-Containers. Dann, wenn ich authentifiziert bin, und ich mache die Anfragen, die der tatsächliche Zweck der App sind, tue ich Folgendes:

generasacodicetagpre.

So ist die falsche Zeile: Ich kann nicht auf die httponly Cookies zugreifen - aber ich muss nicht. Ich wiederverwenden Sie einfach den Cookie-Container, und die Cookies werden automatisch in die nächste Anfrage aufgenommen.

Dies funktioniert sowohl in Windows Phone 7.1 Apps, Windows Phone 8 Apps, Console-Anwendungen usw.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top