Python authlib flask - jak obsłużyć refresh token?

Oct 25 2020

Jak dotąd potrzebuję tylko oauth2 do logowania, ale uważam, że aby być w miarę kompletnym, moja aplikacja powinna nadal obsługiwać tokeny odświeżania.

Jestem całkiem nowy w Oauth, więc rozumiem:
utrzymując krótki okres istnienia tokenu dostępu, ale odświeżając go długo, zmuszasz klienta do regularnego „sprawdzania”, aby odnowić token dostępu, a tym samym zachować większą kontrolę.

Ale jak właściwie to zrobić, używając authlib i integracji kolb?
Wygląda na to, że na FlaskRemoteApp nie ma refresh_token () i nie mogłem znaleźć żadnego przykładowego kodu, który to pokazuje.

Wydaje się, że działa to w celu uzyskania nowego tokena

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

Ale kończy się niepowodzeniem, gdy później używa się nowego access_token do wywołania interfejsu API.
Może to być błąd serwera, a może muszę poczekać, aż stary token wygaśnie, zanim użyję nowego? Czas expires_at, jest aktualizowany i nie ma to dla mnie sensu w tym przypadku.

Byłoby wspaniale, gdyby ktoś mógł wyjaśnić, w jaki sposób refresh_token ma być używany z authlib i flask.

Odpowiedzi

1 Alias_Knagg Nov 03 2020 at 11:16

No chyba, że @lepture wpada z tej odpowiedzi, mam przynajmniej o odpowiedź.
Po prostu brakowało grant_type='refresh_token'mi rozmowy.
Więc teraz działa to zgodnie z oczekiwaniami.

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)

Bawiłem się trochę ustawieniem funkcji update_token w rejestrze, ale nie udało mi się to zrobić. W każdym razie uważam, że jest to wyzwalane tylko wtedy, gdy wywołanie interfejsu API korzystające z tokena otrzyma odpowiedź „wygasły token”. W moim przypadku używam Oauth tylko do logowania, więc mogę po prostu obserwować czas expires_at i trafiać na serwer autoryzacji tylko wtedy, gdy jest to konieczne.