为了账号安全,请及时绑定邮箱和手机立即绑定

谷歌访问令牌在云功能中不起作用

谷歌访问令牌在云功能中不起作用

Go
弑天下 2022-08-24 18:44:59
我使用云函数下提供的此示例向另一个 GCP API 发出 GET 请求:import (        "context"        "fmt"        "io"        "google.golang.org/api/idtoken")func makeGetRequest(w io.Writer, targetURL string) error {        ctx := context.Background()        client, err := idtoken.NewClient(ctx, targetURL)        if err != nil {                return fmt.Errorf("idtoken.NewClient: %v", err)        }        resp, err := client.Get(targetURL)        if err != nil {                return fmt.Errorf("client.Get: %v", err)        }        defer resp.Body.Close()        if _, err := io.Copy(w, resp.Body); err != nil {                return fmt.Errorf("io.Copy: %v", err)        }        return nil}但是当我记录发送的请求时,我没有看到任何授权标头,并且我收到以下错误:"Request  had invalid authentication credentials. Expected OAuth 2 access token, login cookie  or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.\"我已将 serviceAccountTokenCreator 和目标 GCP API 管理员权限授予用于创建云功能的服务帐户。我是否误解了文档的内容?似乎应该自动添加授权标头。
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

这样可以更轻松地不从头开始生成请求,而是使用客户端库。它以每种语言提供惯用、生成或手写的代码,使云 API 使用起来简单直观。它还为您处理身份验证。

根据您关注的内容,客户端会自动添加“授权”标头,因此这应该不是问题所在。你还尝试遵循生成标识令牌的示例,因为调用具有身份验证的 Cloud Function 终结点需要标识令牌。这在您的使用案例中有所不同,因为调用 GCP API 需要 OAuth 2 访问令牌。此链接解释了两者之间的区别。

有一些方法可以通过编程方式生成访问令牌,例如从元数据服务器获取它们,就像我在其他答案中所做的那样(它在Python中,但你也可以在Golang中执行此操作)。但是,我建议更多地了解客户端库的工作原理,并亲自测试它。GitHub 上显示了许多示例来帮助您入门。


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信