【问题标题】:Calling Google IAM generateAccessToken API always returns error调用 Google IAM generateAccessToken API 总是返回错误
【发布时间】:2019-12-11 13:30:58
【问题描述】:

我遇到了无法使用此 method 为 Google IAM 服务帐户生成访问令牌的问题。 我使用以下方法获得了我的个人 OAuth2 访问令牌: gcloud auth application-default print-access-token

我拥有所有必要的角色 (roles/iam.serviceAccountTokenCreator),但是当我 cURL API 时,我总是收到错误响应:

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT"
  }
}

这是完整的 curl 请求的样子:

curl -X POST --header 'Content-Type: application/json' --header 'authorization: Bearer ya29.AASDSADASDASDi9C1yAXXXXXXZzLtDDrCAzblqF_qi5sKvMZcHieBADASDASDTNJiOKrqJBffb4Moh3gTgiTbDgMIF1XDQU5JZ31aACs0aUbI4wgeqV2Q' https://iamcredentials.googleapis.com/v1/projects/<PROJECT_NAME>/serviceAccounts/<SA_NAME>@<PROJECT_NAME>.iam.gserviceaccount.com:generateAccessToken -d '{"scope": ["https://www.googleapis.com/auth/cloud-platform"]}'

谢谢

【问题讨论】:

    标签: service-accounts google-apis-explorer google-iam google-cloud-iam


    【解决方案1】:

    您的 API 调用有两个问题。

    1. 服务帐户名称是一个路径参数,必须经过 URL 编码。 @ 字符无效。使用%40 代替它(作为正确编码的示例)。
    2. URI 指定PROJECT_NAME。这是不正确的。您需要使用-(连字符/破折号)。示例projects/-/serviceAccounts

    您还需要将权限 iam.serviceAccounts.getAccessToken 附加到分配给在此 API 请求中创建请求访问令牌的帐户的角色之一。如果不正确,这将导致不同的错误。只是在您进行下一步时的提示。

    【讨论】:

    • %40替换@和用projects/&lt;PROJECT_NAME&gt;/serviceAccounts替换projects/-/serviceAccounts解决了这个问题!谢谢@john-hanley
    • 太好了,遇到了同样的问题 - 现在可以了!我可以发誓有一些文档/示例,其中“projects/-”中的“-”用作项目 ID 的占位符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2013-04-08
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多