无法通过REST Api验证到Google数据存储区

Man*_*Yau 1 google-cloud-datastore google-cloud-platform

我试图通过其REST Api访问Google的数据存储。它说他们允许通过API密钥进行身份验证。但是,似乎无法在任何地方使用它。我复制了从他们的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
Run Code Online (Sandbox Code Playgroud)

但是它一直向我返回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"
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎要求我改用OAuth,但这不是他们的文档所说的。任何人都经历过类似的事情吗?

Joh*_*ley 5

您使用的API密钥不正确。

该链接详细说明了哪些服务支持API密钥。Cloud Datastore不是其中之一。

使用API​​密钥

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

查看此文档。

使用OAuth 2.0

生成访问令牌的步骤:

  1. 加载服务帐户凭据json文件。
  2. 提取client_emailprivate_keyprivate_key_id
  3. 创建一个JSON负载
  4. 呼叫授权网址:https : //www.googleapis.com/oauth2/v4/token
  5. 这将返回一个json对象。提取access_token
  6. 使用access_token代替API密钥。

互联网上有各种语言的示例。该链接将帮助您入门。该过程看起来很复杂,但是确实如此,但是一旦您理解它,生成访问令牌就很容易了,并且可以重复使用直到它们到期(通常由您控制60分钟)。

Google Cloud Storage身份验证上的此文档与Cloud Datastore相同。关键是要理解“授权:承载”,这是您需要在curl请求中包括的标头。

认证方式