You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Shell中Golang遇invalid_rapt重认证错误的咨询

问题描述

本周首次遇到invalid_rapt重认证错误,场景如下:

  • 登录自定义域名的Google Workspace账号(非Gmail.com);
  • 使用Google Cloud Shell;
  • 开发调用Google Cloud API(如Google Cloud Storage)的Golang项目;
  • 未手动执行认证操作,却触发invalid_rapt错误。

该配置已稳定运行4个月,近期突然异常。但Python代码可正常列出GCS存储桶:

python3 -c 'from google.cloud.storage import Client; print(list(Client().list_buckets()))'

而Golang代码执行失败:

package main

import (
    "context"
    "fmt"
    "log"

    "cloud.google.com/go/storage"
)

func main() {
    ctx := context.Background()
    client, err := storage.NewClient(ctx)
    if err != nil {
        log.Fatalf("Failed to create client: %v", err)
    }
    defer client.Close()

    it := client.Buckets(ctx, "surfey")
    fmt.Println("Buckets:")
    for {
        attrs, err := it.Next()
        if err != nil {
            log.Printf("Failed to list buckets: %v", err)
            break
        }
        fmt.Println(attrs.Name)
    }
}

执行报错信息:

$ ./gobuckets
Buckets:
2024/05/15 21:42:37 Failed to list buckets: Get "https://storage.googleapis.com/storage/v1/b?alt=json&pageToken=&prefix=&prettyPrint=false&project=surfey&projection=full": oauth2: "invalid_grant" "reauth related error (invalid_rapt)" "https://support.google.com/a/answer/9368756"

临时解决方案是在Google Workspace Admin中将重认证策略设为“从不要求重认证”,但存在安全风险。另外,在Google Cloud Shell中执行gcloud auth application-default login时,会收到警告提示该环境为GCE实例,无需手动认证。

咨询问题

  1. 为何默认客户端下Python可正常运行,而Golang不行?
  2. 不使用本地凭证时如何完成重认证?
  3. 可标记哪个“应用”为可信,以避免全局关闭重认证?

解答

1. Python与Golang客户端的差异原因

Python的Google Cloud客户端库(google-cloud-storage)在GCE/Cloud Shell环境下,优先使用元数据服务器获取的服务账号凭证,且底层google-auth库自动适配了Workspace的重认证策略,在凭证刷新时能隐式处理rapt(Re-authentication Proof Token)要求。而Golang的cloud.google.com/go/storage客户端未实现自动交互式重认证流程,缓存的旧凭证过期后无法完成符合要求的刷新,导致报错。

另外两者凭证缓存机制不同:Python客户端可能保留了符合重认证要求的有效凭证,而Golang客户端的缓存凭证已失效且无自动修复逻辑。

2. 不使用本地凭证完成重认证的方式

在Cloud Shell环境中,可通过两种方式处理:

  • 执行gcloud auth login:该命令会触发交互式重认证流程,生成符合Workspace重认证要求的用户凭证,覆盖当前默认应用凭证,无需依赖本地文件;
  • 使用服务账号密钥:创建具备GCS访问权限的服务账号,下载JSON密钥文件后,设置环境变量GOOGLE_APPLICATION_CREDENTIALS指向该文件。服务账号不受用户重认证策略限制,适合长期运行的应用场景。

3. 标记可信应用避免全局关闭重认证

在Google Workspace Admin控制台中,可信任Google Cloud SDK来绕过重认证要求:

  1. 进入「安全」>「访问和数据控制」>「API控件」>「信任的应用」;
  2. 添加应用ID为1084795499008的「Google Cloud SDK」到信任列表。

信任该应用后,Cloud Shell中由gcloud生成的凭证将不受重认证策略约束,无需全局关闭重认证规则。


内容的提问来源于stack exchange,提问作者Neil C. Obremski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:43:14