【问题标题】:400 Bad request when generating the Google API access token using Go iamcredentials client API使用 Go iamcredentials 客户端 API 生成 Google API 访问令牌时出现 400 错误请求
【发布时间】:2021-09-29 03:25:03
【问题描述】:

我正在尝试实现 iamcredentials Go API 客户端以生成 Access Token 以通过 REST API 访问某些 Google API,我正在使用此代码

    package main

    import (
        "context"
        "log"

        "google.golang.org/api/iamcredentials/v1"
    )

    func main() {
        iamcredentialsService, err := iamcredentials.NewService(context.Background())
        if err != nil {
            log.Println("error initialize iamcredential Service ", err)
            return
        }
        accessTokenCall := iamcredentialsService.Projects.ServiceAccounts.GenerateAccessToken(
            "projects/-/serviceAccounts/some-sa@some-project-id.iam.gserviceaccount.com:generateAccessToken",
            &iamcredentials.GenerateAccessTokenRequest{
                Scope: []string{
                    iamcredentials.CloudPlatformScope,
                },
            },
        )

        iamResp, err := accessTokenCall.Do()
        if err != nil {
            log.Println("error generate access token", err)
            return
        }

        log.Println(iamResp)
    }

但是当我尝试运行上面的 sn-p 时,我得到了这个消息

go run main.go 

error generate access token googleapi: Error 400: Request contains an invalid argument., badRequest

有没有办法检查是哪一个导致了上述响应?我不确定,因为没有任何好的实施示例。任何帮助将不胜感激,谢谢。

注意事项:

【问题讨论】:

  • "projects/-/serviceAccounts/some-sa@some-project-id.iam.gserviceaccount.com:generateAccessToken", 你确定你的信息正确吗?
  • 我似乎错误地使用了基于 HTTP 端点示例的名称:D,现在问题已经使用 @guillaume-blaquiere 的解决方案解决了,谢谢您的帮助。

标签: go google-cloud-platform google-oauth access-token


【解决方案1】:

@DanielFarrell 是对的,您需要删除最后的 :generateAccessToken。这里是代码中的文档。不要犹豫去探索它,它是开源的 ;)

// GenerateAccessToken: Generates an OAuth 2.0 access token for a
// service account.
//
// - name: The resource name of the service account for which the
//   credentials are requested, in the following format:
//   `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-`
//   wildcard character is required; replacing it with a project ID is
//   invalid.
func (r *ProjectsServiceAccountsService) GenerateAccessToken(name string, generateaccesstokenrequest *GenerateAccessTokenRequest) *ProjectsServiceAccountsGenerateAccessTokenCall {
    c := &ProjectsServiceAccountsGenerateAccessTokenCall{s: r.s, urlParams_: make(gensupport.URLParams)}
    c.name = name
    c.generateaccesstokenrequest = generateaccesstokenrequest
    return c
}

【讨论】:

  • 感谢您的帮助,是的,我的错误是滥用基于来自 rest api 文档的 HTTP 端点示例的名称参数 :) @guillaume-blaquiere
猜你喜欢
  • 2012-06-29
  • 1970-01-01
  • 2012-11-06
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
相关资源
最近更新 更多