2015-02-23 93 views
12

使用https://github.com/golang/oauth2的例子很少,但它们都不涉及刷新令牌的使用。我尝试了一些方法,但我仍然不满意我的结果。如何在golang/oauth2客户端库中处理刷新令牌

是否有任何示例代码,或者您可能知道一些项目在Github使用oauth2 lib作为示例?

+1

从这个要点(https://gist.github.com/jfcote87/89eca3032cd5f9705ba3#file-gistfile1-go-L26-L30)它似乎是,你应该从你的数据库检索令牌并返回它为* oauth2.Token'。令牌结构定义在这里:https://github.com/golang/oauth2/blob/master/token.go#L25-L49。链接和进一步的讨论在这里:https://github.com/golang/oauth2/issues/84 – Intermernet 2015-02-24 06:33:01

+1

此外,这可能是有趣的“客户端使用提供的令牌返回HTTP客户端。令牌将根据需要自动刷新。 “来自https://godoc.org/golang.org/x/oauth2#Config.Client – Intermernet 2015-02-24 06:45:48

+1

谢谢@Intermernet!我会在今晚测试它,但现在我看到了解决我的问题的方法。虽然我的代码看起来比较相似,但我没有检查令牌的有效性,因此在到期后首次调用总是失败。 – Andrew 2015-02-24 10:00:22

回答

10

在存储参数Expiry之前,您无需担心刷新标记。得到 '令牌' 对象后,存储在数据库中的以下内容:

token.AccessTokentoken.RefreshTokentoken.TokenTypetoken.Expiry

而获取,构建令牌对象再次使用上述参数:

token := new(oauth2.Token) 
token.AccessToken = {{ From DataBase }} 
token.RefreshToken = {{ From DataBase }} 
token.Expiry = {{ From DataBase }} 
token.TokenType = {{ From DataBase }} 

然后得到你的http客户端:

config.Client(ctx, token)

这将处理刷新令牌。摘录(更多信息:Golang oauth2 client):

客户端使用提供的令牌返回HTTP客户端。该令牌将根据需要自动刷新。

唯一的缺点是不刷新访问令牌。但它的作品! Google对使用刷新令牌的次数没有限制。

+0

你说得对。我经过几次尝试才找到这个代码,它或多或少地起作用。至于更新,我想我会用某种钩子构建我的Client结构。 – Andrew 2015-03-12 09:15:09

+0

无论如何,这是我的情况必须的,因为服务器刷新accessToken和refreshToken,所以我应该赶上刷新并立即将其存储在数据库中。 – Andrew 2015-03-12 09:16:25

+0

嗨@Andrew我有点想做同样的事情,你最终做了什么来存储刷新令牌并替换旧的访问令牌? – macguy 2015-06-09 02:37:38

相关问题