如何在golang/oauth2客户端lib中处理刷新令牌

And*_*rew 20 go oauth-2.0

使用https://github.com/golang/oauth2的例子很少,但没有一个涉及刷新令牌的使用.我尝试了很少的方法,但我仍然不满意我的结果.

是否有任何示例代码,或者你知道在一些项目Github上使用oauth2 lib采取为例?

Dev*_*oop 18

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

token.AccessToken,token.RefreshToken,token.TokenTypetoken.Expiry

在获取时,使用上述参数再次构造令牌对象:

token := new(oauth2.Token)
token.AccessToken = {{ From DataBase }}
token.RefreshToken = {{ From DataBase }}
token.Expiry = {{ From DataBase }}
token.TokenType = {{ From DataBase }}
Run Code Online (Sandbox Code Playgroud)

然后得到你的http客户端:

config.Client(ctx, token)

这将处理刷新令牌.摘录(更多信息:Golang oauth2客户端):

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

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

  • 要获取更新的令牌,您可以按照以下步骤操作:https://github.com/golang/oauth2/issues/84#issuecomment-175591180或https://github.com/golang/oauth2/issues/84#issuecomment-254576796 (4认同)
  • GitHub 上有关于该问题的讨论:https://github.com/golang/oauth2/issues/84 (2认同)
  • 有没有办法在刷新后(现在)获取“AccessToken”? (2认同)
  • 我相信 Theraloss 提供的答案和例子是错误的。首先,刷新令牌在使用时经常会更新,到时候就必须更换。旧的刷新令牌无法再使用。代码示例是错误的,因为它们仅涵盖从缓存加载令牌时的令牌刷新。使用 http.Client 时,库会时不时地自动刷新令牌,您会错过所有这些时间。 (2认同)