首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克服401 on /计算/v1/projects/{project}/zones?

克服401 on /计算/v1/projects/{project}/zones?
EN

Stack Overflow用户
提问于 2021-08-27 10:27:07
回答 2查看 165关注 0票数 0

反向工程gcloud工具--主要是使用--log-http --我能够获得生成的auth令牌,甚至选择了相同的范围(在https://www.googleapis.com/oauth2/v1/tokeninfo上进行双重检查):

代码语言:javascript
复制
http://[redacted]/callback?state=[redacted]&code=[redacted]&scope=email+openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&authuser=0&prompt=consent

https://oauth2.googleapis.com:443/token?grant_type=authorization_code&code=[redacted]&redirect_uri=[redacted]/callback&client_id=[redacted]apps.googleusercontent.com&client_secret=[redacted]

我尝试用以下方式点击端点的标题:

代码语言:javascript
复制
Content-Type: application/json
charset: utf-8
Authorization: Bearer [redacted]
X-Goog-User-Project: [redacted]

我还尝试在查询字符串中添加access_token=[redacted]。但不管我做什么,我总是得到:

代码语言:javascript
复制
{
  "error": {
    "code": 401,
    "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "errors": [
      {
        "message": "Login Required.",
        "domain": "global",
        "reason": "required",
        "location": "Authorization",
        "locationType": "header"
      }
    ],
    "status": "UNAUTHENTICATED"
  }
}

/projects/list这样的其他端点似乎可以使用此访问令牌(在标头中)。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-27 20:52:03

原来我的解决方案是100%正确的。由于一些奇怪的原因,保存在我的struct的访问令牌字段中的字符串不同于从远程auth流中收集的字符串。

票数 0
EN

Stack Overflow用户

发布于 2021-08-27 14:36:58

正如我从错误消息中看到的,您得到了401 http状态代码。这意味着您使用的访问令牌不允许您访问(未授权)列出区域。,这里您需要知道,您无法比较zone.list projects.list。事实上,

  • zone.list是计算引擎API的一部分,而projects.list是资源管理器API的一部分。
  • zone.list需要作为计算引擎角色一部分的compute.zones.list权限,就像Compute Viewer一样,而projects.list需要有很多角色的resourcemanager.projects.list,即使是从权限数量来看,Browser角色也是最小的角色(我认为)。
  • 概括地说,通常您使用的是身份的访问令牌,它可以访问projects.list,但不能访问zone.list。

然后,下面这句话引起了我对您如何获得访问令牌的关注:

逆向工程的gcloud工具

您需要知道获取访问令牌非常容易。

  1. 运行gcloud auth login,它通过基于web的授权流获得用户帐户的访问凭据。
  2. 运行gcloud auth print-access-token,它为您的用户帐户打印访问令牌,因此他的权限。

因此,如果您的用户帐户具有compute.zones.listresourcemanager.projects.list权限的角色(例如,Compute Viewer角色两者兼具),您将能够成功地调用两个端点。

最后,下面是一个curl示例,清单区域,使用生成的访问令牌:

代码语言:javascript
复制
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://compute.googleapis.com/compute/v1/projects/<PROJECT_ID>/zones
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68951860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档