2

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

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

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

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

所以总结一下:

//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 ,但这不需要客户端,因此据我所知,令牌没有刷新。

4

1 回答 1

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

于 2021-02-13T11:54:32.050 回答