无法通过 REST Api 对 google 数据存储进行身份验证

Cannot authenticate into google datastore through REST Api

我试图通过他们的 REST Api 访问 Google 的数据存储。它说他们允许通过 API-key 进行身份验证。但是,我似乎无法让它在任何地方工作。我复制了从他们的 Try this API 页面生成的片段。

curl --request POST \
  'https://datastore.googleapis.com/v1/projects/PROJECT_ID:runQuery?key=[YOUR_API_KEY]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"query":{"filter":{"compositeFilter":{"op":"AND","filters":[{"propertyFilter":{"property":{"name":"id"},"op":"EQUAL","value":{"stringValue":"ID"}}}]}},"kind":[{"name":"NAME"}]},"partitionId":{"namespaceId":"NAMESPACE_ID","projectId":"PROJECT_ID"}}' \
  --compressed

但它一直返回 401 错误。

{
    "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"
    }
}

看起来它要求我改用 OAuth,这不是他们的文档所说的。有人经历过类似的事情吗?

您使用的 API 密钥不正确。

此 link 详细说明哪些服务支持 API 密钥。 Cloud Datastore 不是其中之一。

Using API Keys

您想使用从服务帐户凭据派生的访问令牌。

查看此文档。

Using OAuth 2.0

生成访问令牌的步骤:

  1. 加载服务帐户凭据 json 文件。
  2. 提取 client_emailprivate_keyprivate_key_id
  3. 创建一个 json 负载。
  4. 调用授权URL:https://www.googleapis.com/oauth2/v4/token
  5. 这个returns一个jsonobject。提取 access_token.
  6. 使用 access_token 而不是 API 键。

网上有各种语言的例子。 link 会让你开始。这个过程看起来很复杂,但一旦你理解了它,生成访问令牌就很容易,并且它们可以重复使用直到它们过期(通常是你控制的 60 分钟)。

有关 Google Cloud Storage 身份验证的文档与 Cloud Datastore 相同。关键是理解 "Authorization: Bearer" 这是一个 header 你需要包含在你的 curl 请求中。

Authentication