【问题标题】:Python authlib flask - how to handle refresh token?Python authlib flask - 如何处理刷新令牌?
【发布时间】:2020-10-25 23:21:56
【问题描述】:

到目前为止,我只需要 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 和烧瓶一起使用,那就太好了。

【问题讨论】:

    标签: python flask authlib


    【解决方案1】:

    好吧,除非@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 服务器。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 2014-06-15
      • 2021-06-11
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多