Python authlib Flask - как обрабатывать токен обновления?
Пока мне нужен только oauth2 для входа в систему, но я считаю, что мое приложение должно обрабатывать токены обновления, чтобы быть достаточно полным.
Я новичок в oauth, поэтому вот мое понимание:
сохраняя короткое время жизни токена доступа, но увеличивая время жизни токена обновления, вы заставляете клиента регулярно «проверять», чтобы обновить токен доступа, и тем самым поддерживать больший контроль.
Но как это сделать, используя authlib и интеграцию фляги?
Кажется, что в FlaskRemoteApp нет refresh_token (), и я не смог найти ни одного примера кода, показывающего это.
Кажется, это работает, чтобы получить новый токен
res = oauth.myOauth2.fetch_access_token(refresh_token=session['tok_res']['refresh_token'])
session['tok_res'].update(res)
Но не работает при последующем использовании нового access_token для вызова API.
Возможно, это ошибка сервера, или, может быть, мне нужно дождаться истечения срока действия старого токена, прежде чем использовать новый? Время expires_at продолжает обновляться, и в этом случае это не имеет для меня смысла.
Было бы здорово, если бы кто-нибудь мог объяснить, как refresh_token предназначен для использования с authlib и flask.
Ответы
Ну, если @lepture не падает с в ответ, я, по крайней мере , в ответ.
Меня просто не хватало на grant_type='refresh_token'звонок.
Теперь у меня все работает так, как ожидалось.
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)
Я немного поигрался с настройкой функции update_token в реестре, но не смог заставить ее работать. В любом случае я считаю, что это срабатывает только в том случае, если вызов api с использованием токена получает ответ «истекший токен». В моем случае я использую только Oauth для входа в систему, поэтому я могу просто наблюдать время expires_at и нажимать на сервер аутентификации только при необходимости.