Python authlib flask - 如何处理刷新令牌?
Python authlib flask - how to handle refresh token?
到目前为止我只需要 oauth2 登录,但我觉得为了合理地完成,我的应用程序应该仍然处理刷新令牌。
我对 oauth 还很陌生,所以这是我的理解:
通过保持访问令牌的生命周期较短,但刷新令牌的生命周期较长,您可以强制客户端定期“签入”以更新访问令牌,从而保持更多的控制。
但是如何使用 authlib 和 flask 集成实际做到这一点?
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 时间,并且只在必要时访问 auth 服务器。
到目前为止我只需要 oauth2 登录,但我觉得为了合理地完成,我的应用程序应该仍然处理刷新令牌。
我对 oauth 还很陌生,所以这是我的理解:
通过保持访问令牌的生命周期较短,但刷新令牌的生命周期较长,您可以强制客户端定期“签入”以更新访问令牌,从而保持更多的控制。
但是如何使用 authlib 和 flask 集成实际做到这一点?
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 时间,并且只在必要时访问 auth 服务器。