【问题标题】:How to handle refresh tokens in golang/oauth2 client lib如何处理 golang/oauth2 客户端库中的刷新令牌
【发布时间】:2015-04-25 10:34:36
【问题描述】:

使用https://github.com/golang/oauth2 的示例很少,但没有一个涵盖刷新令牌的使用。我尝试了几种方法,但我仍然对我的结果不满意。

有没有示例代码,或者你知道 Github 上的某个项目使用oauth2 lib 来举例?

【问题讨论】:

  • 从这个要点 (gist.github.com/jfcote87/…) 看来,是的,您应该从数据库中检索令牌并将其返回为 *oauth2.Token。令牌结构定义在这里:github.com/golang/oauth2/blob/master/token.go#L25-L49。链接和进一步讨论:github.com/golang/oauth2/issues/84
  • 另外,“客户端使用提供的令牌返回 HTTP 客户端。令牌将在必要时自动刷新。”来自godoc.org/golang.org/x/oauth2#Config.Client
  • 谢谢@Intermernet!我今晚会测试它,但现在我看到了我的问题的解决方案。虽然我的代码看起来比较相似,但我没有检查令牌的有效性,所以到期后第一次调用总是失败。
  • 听起来这可能是问题所在。如果是这样,请将其作为答案发布(最好附上一些简单的示例代码)。

标签: go oauth-2.0


【解决方案1】:

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

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):

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

唯一的缺点是,不会返回刷新的访问令牌。但它有效! Google 对刷新令牌的使用次数没有限制。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2020-11-24
  • 2016-06-01
  • 2019-03-03
  • 2016-05-31
  • 2021-08-12
  • 1970-01-01
相关资源
最近更新 更多