2013-05-09 41 views
2

我在Oauth上并没有那么强大,所以需要一些帮助来实现我的FreeAgent会计系统的接口,他们提供了一个Oauth 2 API。如何使用Rauth python库刷新令牌?

我想在标准的Python代码,它似乎是最好的图书馆是劳伊特。 我的问题是令人耳目一新的令牌。

是否有任何关于如何使用python Rauth库刷新过期令牌的好示例? 那么处理过期的最佳做法是什么? 我可以尝试使用我的令牌,并在因过期错误的情况下要求刷新。 或者也许我可以跟踪令牌的生命,以防万一我的计算表明它已过期,那么请求另一个令牌。 哪里最好保存所有这些令牌信息:在一个配置文件中,在JSON对象,到数据库...?

感谢您的任何帮助。

格雷格

回答

5

Or maybe I could keep track of the life of a token and in case my computation says it's expired then ask for another.

这是我会推荐。在您提出请求之前,在当前的令牌持续到期之前,检查令牌是否已过期。如果有,使用刷新令牌和访问令牌方法来检索新的访问令牌。该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记录。但是,也许我们应该记下文档中的这种一般模式。

希望有帮助!

+0

谢谢麦克斯,我会尝试你的建议。如果我没有错,你是Rauth的作者,感谢你的支持。 – Greggy 2013-05-09 21:28:04

+0

是的,我是作者。如果您还有其他问题,请告诉我。 – maxcountryman 2013-05-10 15:31:11

+0

没有最大值,它不起作用。 我这样做: '服务= rauth.OAuth2Service(...) 数据= {。正如你所说...} 回报service.get_access_token(数据=数据)' 但我得到这个错误: 'KeyError:'解码器无法处理access_token与提供商返回的数据。可能需要不同的解码器。提供者返回:{“access_token”:“xxxxxxxxxxxxxx”,“token_type”:“承载”,“expires_in”:604800}' – Greggy 2013-05-15 18:17:46