【问题标题】:How to refresh a token with Rauth python library?如何使用 Rauth python 库刷新令牌?
【发布时间】:2013-05-03 12:14:10
【问题描述】:

我对 Oauth 不是很了解,所以需要一些帮助来实现我的 FreeAgent 会计系统的接口,他们提供了 Oauth 2 API。

我想用标准 Python 编写代码,看来最好的库是 Rauth。 我的问题是刷新令牌。

有没有关于如何使用 python Rauth 库刷新过期令牌的好示例? 那么处理到期的最佳实践是什么? 我可以尝试使用我的令牌,如果由于过期而出现错误,请请求刷新。 或者也许我可以跟踪令牌的生命周期,以防我的计算表明它已过期,然后再请求另一个。 最好将所有这些令牌信息保存在哪里:在配置文件中、在 JSON 对象中、在数据库中……?

感谢您的帮助。

格雷格

【问题讨论】:

    标签: python oauth rauth


    【解决方案1】:

    或者,也许我可以跟踪令牌的生命周期,以防我的计算表明它已过期,然后再请求另一个。

    这是我推荐的。在某处保留当前令牌的到期时间,然后在您发出请求之前,检查令牌是否已到期。如果有,请使用刷新令牌和访问令牌方法来检索新的访问令牌。 refresh_token 方法可能如下所示:

    def refresh_token():
        if not expired():
            return
    
        # OAuth 2.0 example
        data = {'client_id':client_id,
                'client_secret': client_secret,
                'grant_type': 'refresh_token',
                'refresh_token': refresh_token}
    
        return service.get_access_token(data=data)
    

    因为具体过程可能因提供商而异,所以 rauth 没有记录。不过,也许我们应该在文档中记下这种一般模式。

    希望有帮助!

    【讨论】:

    • 谢谢 Max,我会试试你的建议。如果我没记错你是 Rauth 的作者,谢谢你的支持。
    • 是的,我是作者。如果您还有其他问题,请告诉我。
    • 没有 Max,它不起作用。我这样做:service = rauth.OAuth2Service(...) data = {.as you suggested...} return service.get_access_token(data=data) 但我收到此错误:`KeyError:'解码器无法使用提供者返回的数据处理 access_token。可能需要不同的解码器。提供者返回:{"access_token":"xxxxxxxxxxxxxx","token_type":"bearer","expires_in":604800}'
    • 问题是服务使用的标准解码器。如果我使用将字符串解析为字典的自定义解码器,那么一切正常:def str2dict(x): import ast return ast.literal_eval(x) def refresh_token() ... f = str2dict return service.get_access_token(data=data, decoder=f) 现在已修复。
    • 抱歉代码全部压缩了。如何在 StackOverflow cmets 中插入新行或代码段?
    猜你喜欢
    • 2020-07-12
    • 2021-06-19
    • 2016-09-23
    • 2014-09-13
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多