【问题标题】:Golang OAuth client and refresh tokenGolang OAuth 客户端和刷新令牌
【发布时间】:2016-09-26 14:10:13
【问题描述】:

我已经为 Go 配置了针对 Google 的 OAuth。然后,我使用访问令牌对 gmail api、联系人 api、驱动器 api 等进行请求。这些需要作为实际访问令牌的字符串,而不是对象 *oauth2.Token。

在访问令牌有效时一切正常。一旦它无效,我就无法访问数据。这是有道理的,因为在对服务进行查询之前,我需要使用刷新令牌来获取新的访问令牌。

我的理解是,您从 OAuth 令牌创建的 *http.Client 将在必要时自动刷新新的访问令牌。

但我不确定如何从客户端获取最新的访问令牌,然后将其用作针对 Google API 的 GET 请求的一部分以对服务进行身份验证。

总结一下:

//generate client
//get accessToken.AccessToken from client
//do HTTP GET request to get a users image from contact api (or something)
//pass as either a GET parameter, or as a header the access token

如果客户端处理刷新令牌,那么我需要使用客户端获取访问令牌,使其有效。 你是怎样做的?我已经研究过使用config.TokenSource(ctx, tok),然后我可以调用 TokenSource,但这不需要客户端,因此据我所知,令牌没有刷新。

【问题讨论】:

  • 您在请求重定向 url 时使用了什么 oauth2.AccessType ?

标签: go oauth-2.0 google-oauth refresh-token


【解决方案1】:

“golang.org/x/oauth2”包中的以下函数会根据需要自动刷新令牌。

func (*oauth2.Config).Client(ctx context.Context, t *oauth2.Token) *http.Client

https://pkg.go.dev/golang.org/x/oauth2#Config.Client

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 2021-04-11
    • 2019-05-24
    • 2017-10-27
    • 1970-01-01
    • 2018-12-08
    • 2015-04-25
    • 2017-11-20
    • 2021-09-09
    相关资源
    最近更新 更多