当前位置: 首页 > 知识库问答 >
问题:

Google云数据存储提供401错误响应代码

邢财
2023-03-14

我想使用Google云数据存储构建一个简单的rest API,但我无法访问我的数据

首先,我是Google云平台新手,但这不会阻止我,除非我找到一个解决方案,解决如何使用Google云数据存储进行rest API调用。

我使用Angular 4作为前端,我想发出一个简单的HTTP请求。

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/map';




@Injectable()
export class ApiService {

  private apiUrl1 = 'https://jsonplaceholder.typicode.com/posts';
  private apiUrl2= 'https://datastore.googleapis.com/v1/projects/project-test:runQuery?key=dsdsdsdsdsdsdsdsdsdsdsds';

  data: any = {};

  constructor(
    private http: Http
  ) { }

  getData1() {
    return this.http.get(this.apiUrl1)
    .map((res: Response) => res.json());  <====== this works
  }

  getData2() {
    const body = {
      "query": {}
    };

    return this.http.post(this.apiUrl2, body)
    .map((res: Response) => res.json()); <====== this dont works
  }

}

POSThttps://datastore.googleapis.com/v1/projects/project-test: runQuery? key=1b169abfa8b87ewewqewewqewqewqewqewqewqe401()

请一些专家告诉我,我是否可以使用rest API访问Google云数据存储,如果可以,为什么我有错误401,为什么我需要OAuth2

"消息":"请求缺少所需的身份验证凭据。需要OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据。请参见https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"↵ }↵}↵"

用户如何访问我的数据。一些数据将公开可用

任何关于如何使用RESTAPI访问云数据存储的示例都将对我们有所帮助。我搜索了整个互联网,什么都没有。0个Youtube视频和所有文档都带有App engine。我使用Firebase hosting-angular 4,对于查询,我需要云数据存储

共有1个答案

宦高岑
2023-03-14

TL;DR-API密钥不能与云数据存储API一起使用。相反,您应该使用OAuth 2.0从用户凭据或服务帐户访问令牌。

根据云API的API密钥文档,只有以下4个云服务支持API密钥,而云数据存储不是其中之一。它们通常仅与不需要访问私有用户数据的API一起使用。

  • 谷歌云自然语言API
  • 谷歌云语音API
  • 谷歌云翻译API
  • Google Cloud Vision API

除了API密钥外,GCP还支持使用用户帐户凭据和服务帐户进行身份验证。这里对它们进行了详细解释。

拥有用户帐户凭据或服务帐户凭据后,使用OAuth 2.0需要获取访问令牌。此处描述了该过程。我确实发现了这些特定于javascript的步骤,我觉得这些步骤可能对您的用例最有帮助。

该页面中的示例再次提到了API密钥(这对您的用例不起作用),我找不到任何使用服务帐户的角度特定示例。如果您使用的是节点。js,有一个用于节点的google auth库。js,它在使用服务帐户时负责所有身份验证。该库还支持应用程序默认凭据。

获得OAuth 2.0访问令牌(又名承载令牌)后,可以使用云数据存储API请求中的以下3个查询参数之一传递它:

  • 访问令牌
echo '{gqlQuery: {queryString: "SELECT * FROM Task"}}' | http POST https://datastore.googleapis.com/v1/projects/PROJECT_NAME:runQuery?bearer_token=YOUR_OAUTH_TOKEN

如果您安装了gcloud,您可以使用以下方式获取当前访问令牌:

# Prints the access token
gcloud auth print-access-token
# Use the access token to send the request
echo '{gqlQuery: {queryString: "SELECT * FROM Task"}}' | http POST https://datastore.googleapis.com/v1/projects/PROJECT_NAME:runQuery?bearer_token=$(gcloud auth print-access-token)
 类似资料:
  • 我们将Google Cloud Datastore用于Google App Engine(GAE)应用程序。在我们的项目改造期间,我们希望将数据库从Datastore迁移到Google CloudSQL。 我们在数据存储中约有1 TB数据,不包括索引。 如何从数据存储迁移到云SQL,是否有任何现有的开源解决方案可用于此。 我已经检查了下面的一个https://cloud.google.com/da

  • 因此,在我的客户端代码中,我有: 一切正常。之后我要测试错误。因此,我删除了授权头。 当我用像postman这样的工具进行测试时,我会收到401响应。但是对于我的rest模板,我只收到一个IllegalArgumentException。 我也测试了ResponseErrorHandler。 所以我的问题是如何使用rest模板找到我的401错误响应。 这里有个例外: 和堆栈跟踪:

  • 问题内容: Iam尝试对https URL进行身份验证,但Iam出现异常。下面是代码。 例外情况: 请任何人建议如何解决此问题。 问题答案: 401错误代码表示“未经授权”。我相信您的代码无法正确编码Authentication标头。假设服务器需要 基本访问身份验证, 则代码应如下所示: RFC 2617 中提供了HTTP基本和摘要身份验证方案的全面描述

  • 我有以下来自数据库的路由配置 所有代理服务都将返回公共响应json以防出现错误场景

  • 我正在尝试使用DataFlow(Java)将数据从云存储插入到Big Query中。我可以批量上传数据;但是,我想要设置一个流式上传代替。因此,当新对象添加到我的bucket时,它们将被推送到BigQuery。 我已经将PipelineOptions设置为流,并且在GCP控制台UI中显示dataflow管道是流类型的。bucket中的初始文件/对象集被推送到BigQuery。 但是当我向桶中添加新

  • 我需要从Google Cloud Storage(GCS->Temp Table->Main table)中加载100个表到BigQuery。我创建了一个python进程,将数据加载到BigQuery中,并在AppEngine中进行调度。因为AppEngine最多有10min的超时时间。我已经在异步模式下提交了作业,并在稍后的时间点检查了作业状态。由于我有100个表,需要创建一个监控系统来检查作业