Golang OAuth客户端和刷新令牌

时间:2016-09-26 14:10:13

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

我已针对Google配置了Go with OAuth。然后我使用访问令牌来执行针对gmail api,contacts api,drive 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,但是这并不需要客户端,因此根据我的意思,令牌不会刷新。

1 个答案:

答案 0 :(得分:0)

“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