0

Ich versuche, ein neues Projekt in der Google Cloud Platform mithilfe der Cloud Resource Manager API zu erstellen. Alles funktioniert gut, wenn ich es über den API-Explorer verwende, aber ich verstehe nicht ganz, wie man es als HTTP-Anfrage außerhalb von API Explorer verwendet.Erstellen Sie Google Cloud Project mit Cloud Resource Manager-API

Ich betreibe die Anfrage wie folgt aus:

curl -H "Content-Type: application/json" -X POST -d '{"name": "project example","projectId": "my-project-example-1234"}' https://cloudresourcemanager.googleapis.com/v1/projects?fields=response&key={MY_APY_KEY} 

Antwort:

{ 
    "error": { 
    "code": 401, 
    "message": "The request does not have valid authentication credentials.", 
    "status": "UNAUTHENTICATED" 
    } 
} 

Die Dokumentation sagt, dass dieser Antrag requires an OAuth scope und das ist, wenn die Dinge verwirrend für mich bekommen. Lesen der Dokumentation Ich konnte nicht verstehen, wie einer der erforderlichen OAuth-Bereiche mit der URL übergeben werden kann, wenn ich die HTTP-Anforderung an die Rest-API übergebe, die ich nur vermute, was ich vermisse.

+0

Bereiche werden bei der OAuth-Authentifizierung und nicht bei der anschließenden Verwendung der Anmeldeinformationen übergeben: https://cloud.google.com/docs/authentication#oauth_scopes und https://cloud.google.com/resource-manager/docs/ autorisieren. – Alex

+0

Ich nehme an, dass die Curl-Anfragen nur zum Testen dienen: Was ist Ihre Zielsprache, die Sie verwenden möchten? Planen Sie, die Projekte im Auftrag Ihres Endbenutzers zu erstellen, oder möchten Sie die Projekte mit Ihrem eigenen Konto als Eigentümer erstellen? – BrettJ

+0

@BrettJ. Du hast die Idee. Ich verwende Go und ich würde Projekte im Auftrag meines Endbenutzers erstellen und nicht das Standardkonto, wie alle Beispiele, die ich hier finden könnte. –

Antwort

2

Anstatt nur zu sagen, wie man mit einem funktionierenden Token testet, werde ich versuchen, allgemeiner zu beantworten, was Sie anstreben.

  1. Enable the Resource Manager API für Ihre Cloud Console Projekt:

    Bei einem ziemlich hohen Niveau, werden Sie brauchen.

  2. Create an OAuth client ID for Web applications in der Cloud-Konsole. Sie müssen Ihren autorisierten Weiterleitungs-URI registrieren. Hier erhält Ihre App die OAuth-Antwort von Google zurück, wenn der Endbenutzer Ihre App autorisiert. Notieren Sie die Client-ID, die Sie als nächstes benötigen.

  3. Starten Sie den OAuth Fluss durch Ihre URL Montage:

    die Client-ID
    https://accounts.google.com/o/oauth2/v2/auth? 
    response_type=code& 
    client_id=<123456789example>.apps.googleusercontent.com& 
    scope=https://www.googleapis.com/auth/cloudplatformprojects& 
    redirect_uri=http://<YOUR-APP-URL>/<YOUR-OAUTH-HANDLER> 
    

    in dieser URL ersetzen und die URI umleiten. Ich nehme an, dass Sie eine Schaltfläche oder einen Link auf Ihrer Website haben, auf die der Benutzer klicken muss, um diesen Flow zu starten.

  4. Codieren Sie Ihren OAuth-Handler. Ein etwas ausführlicherer Code dafür in Go kann aus this Go Sample entnommen werden, der ursprünglich für G + -Anmeldung gedacht war, aber ein Großteil der Logik wird gleich sein.Sie erhalten einen code Abfrageparameter, der an Ihre Anwendung übergeben wird. Der Wert ist ein einmaliger Autorisierungscode, den Ihre Anwendung für Ihre OAuth-Token austauschen muss, die Sie für API-Aufrufe im Namen des Benutzers verwenden.

  5. Wenn es für Ihre App und Situation angemessen ist, speichern Sie Ihre Token sicher zur späteren Verwendung oder zur Verarbeitung, während Ihr Benutzer nicht auf Ihrer Site aktiv ist (möglicherweise für Stapelverarbeitung geeignet).

  6. Jetzt, da Sie über ein Zugriffstoken verfügen, können Sie dieses an die Resource Manager-API übergeben und im Auftrag des Benutzers Projekte erstellen. Sie könnten die Go client library verwenden oder Sie könnten die HTTP-Endpunkte direkt in Ihrem Code aufrufen.

Wenn Sie mehr Tests mit curl wollen, würde ich den Prozess folgen, die wir accessing the App Engine Admin API schrieb auf. Ersetzen Sie Admin-API-URLs und -Namen für den Ressourcen-Manager und Sie haben den Gesamtablauf. Der Unterschied von dem, was oben ist, ist eine code Ablauf oben, weil ich davon ausgehe, dass Sie serverseitige und möglicherweise aktualisieren Token möchten, wenn Sie in der Lage sein müssen, diese API-Aufrufe durchzuführen, während der Benutzer auf Ihrer Website nicht aktiv ist.

0

Wie Alex sagt, fragen Sie nach Bereichen während der OAuth-Authentifizierung. Ein Weg, um leicht zu authentifizieren und erhalten einen OAuth-Zugriffstoken tut:

gcloud beta Auth applikations Standard-Login --scopes = https://www.googleapis.com/auth/cloudplatformprojects

Wie Sie sehen können, können Sie die Bereiche angeben, Sie wollen gcloud und wird sich um die Authentifizierung für Sie kümmern.

Dann sollten Sie in der Lage sein, ein Projekt Berufung zu erstellen:

curl -H "Content-Type: application/json" -H „Authorization: Bearer $ (gcloud beta Auth applikations Standard-Druck-Access- token) "-X POST -d '{" name ":" projektbeispiel "," projektinstanz ":" meinprojektbeispiel-1234 "}' https://cloudresourcemanager.googleapis.com/v1/projects?fields=response

Hier übergeben Sie das Zugriffstoken, das Sie erhalten haben Oauth Authentifizierung gemacht. Dies sollte von den Clientbibliotheken für Sie erledigt werden, wenn Sie die Standardanmeldeinformationen der Anwendung erhalten.

+0

Danke dafür, aber ich kann diese Antwort nicht akzeptieren. Was ist der Sinn der Verwendung einer API, wenn ich das gcloud-Tool damit verwenden muss? Es widerspricht einfach dem ganzen Zweck der API selbst. Sonst könnte ich gcloud ganz benutzen und hätte keine Notwendigkeit für die API. Ich kenne die Methode, die Sie hier beschrieben haben, und genau das möchte ich vermeiden. Wie ich in der Frage gesagt habe, funktioniert es durch den API-Explorer, der genau die gleiche Methode verwendet, wie Sie beschrieben haben, der Unterschied ist, dass es anstelle von gcloud auf einen Google-Login-Bildschirm umleitet. –

+0

Nun, Sie verwenden curl, um Ihre Anfrage zu testen und zu sehen, ob sie von außerhalb des APIs Explorers funktioniert. Um mit curl zu testen, benötigen Sie ein gültiges Zugriffs-Token (die Anfrage muss authentifiziert werden). Ich würde nicht den Sinn sehen, die Oauth-Authentifizierung manuell durchzuführen. Auch Google verwendet dieses Verfahren in seinen Beispielen: https://cloud.google.com/container-builder/docs/curl#send_the_build_request – dyeray

+0

Wenn Sie wirklich alles nur mit curl machen möchten, müssen Sie zwei Anfragen stellen. Eine gegen Google Oauth 2.0-Endpunkte, um ein gültiges Zugriffstoken zu authentifizieren und zu erhalten, und eine andere, um Ihre API mit dem erhaltenen Token aufzurufen. Google rät davon ab, diese direkt zu verwenden. Ich bin mir nicht sicher, wie Sie Ihre Anfrage an Cloud Resource Manager verstehen können API mehr. In jedem Fall ist das Übergeben von --log-http an das gcloud-Tool eine gute Möglichkeit, die zugrunde liegende Anforderung an die Oauth 2.0-Endpunkte zu sehen, wenn Sie daran interessiert sind. – dyeray