Verwenden Sie ein Aktualisierungstoken, wenn das Authentifizierungstoken im Kontoauthentifikator abgelaufen ist

9

Ich habe eine App, die AccountManager zum Speichern von Benutzerkonten verwendet. Benutzer melden sich über meine REST-API an und registrieren sich über den OAuth2.0-Password-Username Credentials Flow.

Die Zugriffstoken, die Benutzer erhalten, verfallen in 2 Stunden und müssen aktualisiert werden, bis sie wieder abgelaufen sind usw.

Ich muss diese erfrischende Funktionalität in meinem Authentifikator implementieren.

Ich habe ein Modell namens AccessToken mit den folgenden Feldern:

String accessToken, String tokenType, Long expiresIn, String refreshToken, String scope, Long createdAt .

Also, in meiner getAuthToken Methode in AccountAuthenticator Klasse erhalte ich dieses AccessToken Objekt und benutze sein accessToken Feld als Auth Token für meinen Account Manager.

Was ich brauche, ist, irgendwie sowohl das Aktualisierungs-Token als auch das Authentifizierungs-Token mit meinem Account-Manager zu speichern und wenn die App versucht, auf die API zuzugreifen und die Fehlerantwort zu erhalten: {"error": "access token expired"} , um das aktuelle Zugriffstoken mit refreshToken zu aktualisieren. Zeichenfolge aus dem AccessToken -Objekt, das zuvor empfangen wurde. Ich bin mir jedoch nicht sicher, wie ich es machen soll.

Meine getAuthToken -Methode in der authenticator-Klasse sieht momentan so aus:

%Vor%

und die Klasse AccountGeneral enthält nur einige Konstanten:

%Vor%

Die App wird auch SyncAdapter verwenden und wird ziemlich häufig mit der API interagieren, um die Daten von und zum Server zu synchronisieren, und diese API-Aufrufe müssen auch Zugriffstoken als Parameter in den Anfragen verwenden, also wirklich müssen diese Aktualisierungsfunktionalität implementieren und automatisch machen.

Weiß jemand, wie man das richtig umsetzt?

PS: Ich werde eine lokale Datenbank verwenden, um alle meine Daten zu speichern, und ich könnte auch die Token-Objekte speichern. Dies scheint ein einfacher Hack zu sein, obwohl unsicher. Vielleicht sollte ich immer nur ein Refresh-Token immer als DB-Record speichern und aktualisieren, wenn die App das neue Token erhält?

PPS: Ich bin frei, die Art, wie die API irgendwie funktioniert, zu ändern. Wenn es also Vorschläge gibt, die mobile App zu verbessern, indem wir die API verbessern, werden sie auch sehr geschätzt.

    
Denis Yakovenko 30.12.2015, 11:18
quelle

1 Antwort

4

Sie können das Aktualisierungstoken in den Benutzerdaten Ihres Kontos speichern, wenn Sie Ihr Konto zum ersten Mal hinzufügen:

%Vor%

Sie können die Benutzerdaten auch nach dem Hinzufügen des Kontos festlegen, indem Sie Folgendes aufrufen:

%Vor%

Wenn der Zugriff auf das Token abgelaufen ist, können Sie das Aktualisierungstoken abrufen, indem Sie Folgendes aufrufen:

%Vor%

Verwenden Sie das refreshToken, um ein neues Zugriffstoken abzurufen.

    
Grace Coder 30.12.2015, 11:57
quelle