如何从 GCP Golang SDK 检索访问令牌?

How to retrieve access-token from GCP Golang SDK?

我们正在为 GCP 实施一个应用程序,它需要 oauth2 不记名令牌来根据 GCR docker 进行身份验证。该应用程序是用 Go 编写的,它使用 Golang 的 GCP SDK。

我想从 SDK 中获得 gcloud auth print-access-token 提供的内容,但我不知道该怎么做...

看看oauth2/google

您可能(!?)能够使用工作负载身份联合(也使用此库,从而避免使用 Google 服务帐户密钥)但是,使用服务帐户(与 roles/storage.objectAdmin参见 GCR: Granting IAM roles) and Application Default Credentials (export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/key.json) look at DefaultTokenSource

Token returned by Token() from TokenSource 给你一个 access_token(和 refresh_token 和有效期)。

更新

您可以使用服务帐户密钥文件 directly 向 GCR 验证 Docker 客户端。这将简化您的代码(并避免刷新)。该文档重申了使用服务帐户密钥时的谨慎。