Código de respuesta de error 401 dado por el almacén de datos de Google Cloud

Preguntas frecuentes

Quiero construir una API de reposo simple usando Google Cloud data Store, pero no puedo acceder a mis datos
En primer lugar, soy nuevo en Google Cloud, pero eso no me detendrá hasta que encuentre una solución para usar google Cloud data Store para llamadas API rest.
Estoy usando angular 4 como Front - end y quiero hacer una simple solicitud http.

Estos son mis datos en la base de datos de Google Cloud


enter image description here

Esta es mi API. Servicio. TS

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
  }

}

Tengo este error.


POST https://datastore.googleapis.com/v1/projects/project-test:runQuery?key=1b169abfa8b87ewewqewewqewqewqewqewqe 401 ()


Pida a algunos expertos que me digan si puedo acceder a Google Cloud data Store usando la API Rest
Si es así, por qué tengo el error 401 y por qué necesito oauth2

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


Cómo los usuarios acceden a mis datos. Algunos datos se harán públicos
Cualquier ejemplo de cómo acceder al almacenamiento de datos en la nube usando la API Rest nos ayudará.
Busqué en Internet, nada. 0 vídeos de YouTube
Todos los documentos son motores de aplicación. Utilizo firebase hosting - angular 4, para consultas, necesito almacenamiento de datos en la nube

La mejor manera de manejarlo para mí

TL; La clave DR - API no está disponible para APIs de almacenamiento de datos en la nube. Usted debe utilizar el token de acceso OAuth 2.0 de credenciales de usuario o cuentas de servicio.

Restricciones de clave API


Basado en API key documentation for Cloud APIs, sólo los siguientes cuatro servicios en la nube soportan claves API, y el almacenamiento de datos en la nube no está allí. Por lo general, sólo se utilizan con APIS que no requieren acceso a datos de usuarios privados.
  • Google Cloud Natural Language API
  • Google Cloud Speech API
  • Google Cloud Translation API
  • Google Cloud Vision API
  • Mecanismo de autenticación soportado por Google Cloud Platform


    Además de las claves API, GCP también admite el uso de credenciales de cuenta de usuario y cuentas de servicio para la autenticación. Son explained in detail here.

    Invocación de la API de Google usando oauth 2.0


    Una vez que tenga credenciales de cuenta de usuario o credenciales de cuenta de servicio, necesita usar OAuth 2.0 para obtener un token de acceso. process is described here. Encontré el these steps specific to javascript, y creo que podría ser el más útil para su caso de uso.
    El ejemplo en esta página menciona una vez más la clave API (que no funciona con su caso de uso), y no puedo encontrar ningún ejemplo específico usando una cuenta de servicio. Si está usando un nodo. Hay un google-auth library for Node.js en js que es responsable de todas las autenticaciones cuando se utiliza una cuenta de servicio. La Biblioteca también soporta Application Default Credentials .

    Pasar credenciales oauth 2.0


    Después de obtener el token de acceso OAuth 2.0 (también conocido como Token host), puede pasar el Token en una solicitud de API de almacenamiento de datos en la nube usando uno de los tres parámetros de consulta siguientes:
  • access_token
  • oauth_token
  • bearer_token
  • Ejemplo de uso de la línea de comandos

    echo '{gqlQuery: {queryString: "SELECT * FROM Task"}}' | http POST https://datastore.googleapis.com/v1/projects/PROJECT_NAME:runQuery?bearer_token=YOUR_OAUTH_TOKEN
    
    Si ha instalado gcloud, puede obtener el token de acceso actual de la siguiente manera:
    # 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)