Google Cloud Platform REST API: 获取访问令牌和 API 密钥

Google Cloud Platform REST API: Acquiring Access Token and API Key

我希望在本地使用 Google 云平台 (GCP) REST API,从 apps.services.versions.instances.list 方法开始。

当我使用“试试这个 API”here 时,该路由有效,但我如何在本地使用此方法 curl

"https://appengine.googleapis.com/v1/apps/$APPSID/services/$SERVICESID/versions/$VERSIONSID/instances?key=$YOUR_API_KEY" \
--compressed \
--header 'Accept: application/json' \
--header "Authorization: Bearer $YOUR_ACCESS_TOKEN"

#=>

{
  "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.",
    "status": "UNAUTHENTICATED"
  }
}

如何访问 $YOUR_API_KEY$YOUR_ACCESS_TOKEN?我一直无法在官方 GCP 文档中找到它们。

最快的方法是使用云 Shell:

  1. 列出项目以获取项目 ID
    gcloud projects list
    
    # save you project id
    PROJECT_ID="YOURS_PROJECT_ID"
    
  2. 获取ACCESS_TOKEN
    ACCESS_TOKEN=$(gcloud auth print-access-token)
    
  3. 获取API_KEY
    API_KEY=$(curl -X POST https://apikeys.googleapis.com/v1/projects/$PROJECT_ID/apiKeys?access_token=$ACCESS_TOKEN | jq -r ".currentKey")
    
  4. 打印 API_KEY 和 ACCESS_TOKEN
    echo $ACCESS_TOKEN
    echo $API_KEY
    

为了 运行 在本地机器上执行上述命令,您首先需要使用命令 gcloud auth login 进行身份验证并按照说明进行操作。

或者可以从控制台读取或创建 api 键转到 Navigation Menu -> APIs & Services -> Credentials 然后单击 CREATE CREDENTIALS - > API Key.


通过阅读documentation(点击Credentials旁边的问号)我们可以阅读:

  • [YOUR_API_KEY] - “包含一个 API 密钥来标识您的项目,用于验证启用和跟踪请求配额。”
  • [YOUR_ACCESS_TOKEN] - “包括访问(不记名)令牌以识别使用您的客户端 ID 完成 OAuth 流程的用户。”

您不再需要 API 密钥。这是 Google API 的遗留功能,仅提供访问令牌就足够了。

在命令行中你可以这样做

 curl -H "Authorization: Bearer $(gcloud auth print-access-token)" https://....

所有 Google 云 API 都符合访问令牌身份验证。很少有人仍然遵守 API 密钥。

关于API键API

此 API 已发布测试版,现已关闭。至少文档部分。我不知道这个 API 是否稳定或可能会发生变化。您可以像这样为每个 API 创建一个 API 键(非常类似于 Bartosz Pelikan 的回答)

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
   -X POST https://apikeys.googleapis.com/v1/projects/PROJECT_ID/apiKeys

如你所见,我复用了access token认证方式

以上答案使用的 API 未公开(我已联系 GCP 支持人员确认。

我建议像这样使用 CLI 工具:

gcloud app instances list --service core-api --project my-project-name

文档:https://cloud.google.com/sdk/gcloud/reference/app/instances/list

您必须先 gcloud auth 并可能设置您的项目。