我已针对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,但是这并不需要客户端,因此根据我的意思,令牌不会刷新。
答案 0 :(得分:0)
“golang.org/x/oauth2”包中的以下函数会根据需要自动刷新令牌。
func (*oauth2.Config).Client(ctx context.Context, t *oauth2.Token) *http.Client