【发布时间】:2023-01-02 02:59:27
【问题描述】:
尝试使用服务器到服务器身份验证通过服务帐户进行身份验证时,google/Oauth2 包出现问题。 Google 以一个带有空刷新令牌字符串的令牌结构进行响应,令牌将在 1 小时后过期,我无法刷新,因为我没有刷新令牌。 这是我正在使用的代码 sn-p:
data, err := ioutil.ReadFile(fmt.Sprintf("%s/%s", path, serviceAccountFilePath))
if err != nil {
log.Fatalf("Failed to read GCP service account key file: %s", err)
}
ctx := context.Background()
fmt.Println(scopes)
creds, err := google.CredentialsFromJSON(ctx, data, scopes...)
if err != nil {
log.Fatalf("Failed to load GCP service account credentials: %s", err)
}
t, _ := creds.TokenSource.Token()
fmt.Println(t.Expiry.Sub(time.Now()).String(), t.RefreshToken, ">>>")
我在使用服务帐户进行身份验证时尝试了不同的方式,例如配置和 JWT,但我仍然得到相同的结果。
【问题讨论】:
-
将您的令牌源包装在 ReuseTokenSource 中,并且仅在必要时才请求新令牌。
-
这样 creds.TokenSource = oauth2.ReuseTokenSource(t, creds.TokenSource)?
-
我认为这是非常多余的,就好像你看一下 func CredentialsFromJSON,它使用这个 func tokenSource 它将在后台调用可重用令牌源
标签: go google-cloud-platform google-oauth service-accounts