2016-04-14 6 views
1

Nach einer erfolgreichen Anmeldung am Microsoft Graph API-Dienst werden 2 ADTokenCacheStoreItems erstellt. Einer davon enthält den accessToken (refreshToken ist nil) und der andere enthält refreshToken (accessToken ist nil).Refresh-Token wird nie verwendet, da mehrere ADTokenCacheStoreItems - ADALiOS

enter image description here

mit 2 zwischengespeicherten Elementen ist in Ordnung, aber es verursacht die Aktualisierungs-Token-Logik zum Scheitern verurteilt. Die [attemptToUseCacheItem:] Methode verwendet die ADTokenCacheStoreItem, die das AccessToken enthält. Wenn der accessToken abgelaufen ist, überprüft er das Aktualisierungstoken. In diesem Element ist das Aktualisierungstoken gleich Null, sodass der gesamte Prozess mit dem Fehler 'Versuch, ein Element ohne Aktualisierungstoken zu verwenden' fehlschlägt. Auf das zweite Element (mit dem Aktualisierungstoken) wird tatsächlich nie zugegriffen.

Als Ergebnis wird das Zugriffstoken nie aktualisiert. Was scheint hier das Problem zu sein?

Antwort

0

ADALiOS funktioniert gut, ich kann das Problem nicht reproduzieren. Das Problem behoben ist, werden die Details im Thread sind: https://github.com/AzureAD/azure-activedirectory-library-for-objc/issues/598#issuecomment-211636229

Kopieren über Ryans Antwort hier nur für den Fall der Link geht nach unten:

Das Zugriffstoken aus der Multi Ressource Refresh Token separat gespeichert wird, in der Cache für ADALiOS. Wenn Sie acquireTokenSilent aufrufen, aktualisiert erfolgreich einen AT vom MRRT.

Die Zeile "Das zweite Element (mit dem Aktualisierungstoken) ist eigentlich nie zugegriffen." ist falsch. Sehen Sie sich -attemptToUseCacheItem an: in ADAuthenticationContext (1.2.x) oder ADAuthenticationRequest (2.1) können Sie sehen, wo ADAL nach dem MRRT sucht und es versucht. Suchen Sie nach dem "//Versuchen Sie Multi-Ressource-Aktualisierungstoken, wenn es nicht gerade versucht" kommentieren, wenn Sie es schwer haben, es zu finden.

Es gibt eine beträchtliche Menge an Unit-Tests um dieses Szenario herum und Sie versuchen es auch manuell in der Test-App. Die einzige Art, wie Sie das gewünschte Verhalten sehen, ist , wenn Sie nicht die richtigen acquireToken-Einstiegspunkte verwenden.