Python Authlib Flask - Wie gehe ich mit dem Refresh Token um?

Oct 25 2020

Ich brauche bisher nur oauth2 für die Anmeldung, aber ich bin der Meinung, dass meine App, um einigermaßen vollständig zu sein, weiterhin Aktualisierungstoken verarbeiten sollte.

Ich bin ziemlich neu in Oauth, daher hier mein Verständnis:
Indem Sie die Lebensdauer des Zugriffstokens kurz halten, aber die Lebensdauer des Aktualisierungstokens lang halten, zwingen Sie den Client, regelmäßig "einzuchecken", um das Zugriffstoken zu erneuern und dadurch mehr Kontrolle zu behalten.

Aber wie macht man das eigentlich mit authlib und der Kolbenintegration?
Es scheint kein refresh_token () in der FlaskRemoteApp zu geben, und ich konnte keinen Beispielcode finden, der dies zeigt.

Dies scheint zu funktionieren, um ein neues Token zu erhalten

res = oauth.myOauth2.fetch_access_token(refresh_token=session['tok_res']['refresh_token'])
session['tok_res'].update(res)

Schlägt jedoch fehl, wenn anschließend das neue access_token für einen API-Aufruf verwendet wird.
Könnte ein Serverfehler sein, oder muss ich warten, bis das alte Token abläuft, bevor ich das neue verwende? Die expires_at-Zeit wird ständig aktualisiert und das macht für mich in diesem Fall keinen Sinn.

Es wäre großartig, wenn jemand erklären könnte, wie refresh_token mit authlib und flask verwendet werden soll.

Antworten

1 Alias_Knagg Nov 03 2020 at 11:16

Nun, es sei denn, @lepture kommt mit der Antwort vorbei, ich habe zumindest eine Antwort.
Ich habe einfach in grant_type='refresh_token'meinem Anruf gefehlt .
Das funktioniert jetzt also wie erwartet für mich.

if session['oatoken']['expires_at'] - 2 < now:  # refresh 2 seconds early
    oatoken = oauth.myOauth2.fetch_access_token(
        refresh_token=session['oatoken']['refresh_token'],
        grant_type='refresh_token')
    session['oatoken'].update(oatoken)

Ich habe ein wenig mit dem Festlegen der Funktion update_token in der Registrierung herumgespielt, konnte es aber nicht zum Laufen bringen. In jedem Fall glaube ich, dass dies nur ausgelöst wird, wenn ein API-Aufruf, der das Token verwendet, eine Antwort "abgelaufenes Token" erhält. In meinem Fall verwende ich Oauth nur für die Anmeldung, sodass ich nur die expires_at-Zeit beobachten und nur bei Bedarf auf den Authentifizierungsserver zugreifen kann.