0

Cloud Resource Manager APIを使用してGoogle Cloud Platformで新しいプロジェクトを作成しようとしています。 APIエクスプローラで使用するとうまく動作しますが、APIエクスプローラ以外でhttpリクエストとして使用する方法はわかりません。クラウドリソースマネージャAPIを使用してGoogleクラウドプロジェクトを作成

私はこのような要求を実行します。

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} 

応答:

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

ドキュメントは物事が私には混乱するかもしれないときに、この要求requires an OAuth scope、それはだと言います。 ドキュメントを読む必要があるOAuthスコープの1つが、私が唯一想定している残りのAPIにhttpリクエストをするときにURLと一緒にどのように渡すことができないのか理解できませんでした。

+0

スコープはOAuth認証中に渡され、その後の資格情報の使用では受け入れられません:https://cloud.google.com/docs/authentication#oauth_scopes およびhttps://cloud.google.com/resource-manager/docs/許可する。 – Alex

+0

私はカールのリクエストがテストのためだけであると仮定します:あなたの目標言語は何ですか?エンドユーザーの代わりにプロジェクトを作成する予定ですか、所有者として自分のアカウントでプロジェクトを作成したいですか? – BrettJ

+0

@ BrettJ。あなたはその考えを得る。私はGoを使用しています。ここで見つけることができるすべての例のように、デフォルトのアカウントではなく、エンドユーザーの代わりにプロジェクトを作成します。 –

答えて

2

実際に動作するトークンでテストする方法を伝えるのではなく、私があなたがしたいことにもっと広範に答えようとします。かなりハイレベルで

、あなたがする必要があります:あなたのクラウドコンソールプロジェクトのために

  1. Enable the Resource Manager API

  2. Create an OAuth client ID for Web applicationsクラウドコンソール。許可されたリダイレクトURIを登録する必要があります。これは、エンドユーザーがあなたのアプリを承認したときにあなたのアプリがGoogleからOAuth応答を返す場所です。クライアント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> 
    

    は、そのURLにクライアントのIDを交換し、URIをリダイレクト:
  3. は、あなたのURLを組み立てることにより、OAuthのフローを開始します。私はあなたがこの流れを開始するためにユーザをクリックさせるあなたのサイトのボタンまたはリンクを持っていると思います。

  4. OAuthハンドラをコーディングします。 Goでこれを行うための詳細なコードは、もともとG +サインイン用のthis Go Sampleから収集できますが、ロジックの多くは同じになるでしょう。codeクエリパラメータをアプリケーションに渡す予定です。この値は、アプリケーションにユーザーの代わりにAPI呼び出しを行うために使用するOAuthトークンを交換する必要がある1回限りの承認コードです。

  5. アプリや状況に応じて、後で使用するか、ユーザーがサイトでアクティブでないときに処理するためにトークンを安全に保管します(バッチ処理に適している可能性があります)。

  6. これで、アクセストークンがあるので、これをResource Manager APIに渡して、ユーザーに代わってプロジェクトを作成することができます。 Go client libraryを使用するか、コード内で直接HTTPエンドポイントを呼び出すことができます。

あなたはカールとのより多くのテストをしたい場合は、私たちはaccessing the App Engine Admin APIを書いたプロセスに従うと思います。 Resource Managerの管理API URLと名前を代用すれば、全体的な流れが得られます。上記のものとの違いは、ユーザがあなたのサイトでアクティブではない間にこれらのAPIコールを行う必要がある場合は、サーバー側のトークンとリフレッシュトークンを必要としていると仮定しているので、上記のフローを上記のcodeフローとして使用しました。

0

Alexと同様、OAuth認証中にスコープを要求します。簡単にOAuthアクセストークンをやっている認証および取得するための一つの方法:

のgcloudベータ認証アプリケーション・デフォルトのログイン--scopesを= https://www.googleapis.com/auth/cloudplatformprojects

あなたが見ることができるように、あなたがのgcloudしたいスコープを指定することができますし、それあなたのための認証の世話をします。

その後、プロジェクトの呼び出しを作成することができるはずです。

カール-H "のContent-Type:アプリケーション/ JSON" -H「認証:ベアラ$(のgcloudベータ認証アプリケーションのデフォルトの印刷-access-トークン) "-X POST -d '{" name ":"プロジェクトの例 "、" projectId ":" my-project-example-1234 "}' https://cloudresourcemanager.googleapis.com/v1/projects?fields=response

ここでは、 Oauth認証を行いました。これは、アプリケーションのデフォルトの資格情報を取得したときに、クライアントライブラリによって処理される必要があります。

+0

ありがとう、私はこの答えを受け入れることはできません。 gcloudツールを使用する必要がある場合、APIを使用するポイントは何ですか?それはAPI自体の全目的に反するだけです。それ以外の場合、私はgcloudを完全に使用することができ、apiの必要はありません。私はあなたがここで説明した方法を認識しており、それはまさに私が避けたいものです。私が質問したところでは、説明したのとまったく同じ方法を使用するAPIエクスプローラで動作しますが、違いはgcloudではなくGoogleログイン画面にリダイレクトする点です。 –

+0

さて、curlを使ってリクエストをテストし、API Explorerの外で動作するかどうかを確認しています。 curlでテストするには、有効なアクセストークンが必要です(要求を認証する必要があります)。手動でOauth認証を行うという点は私には分かりません。 Googleでさえ、この手順をその例で使用しています。https://cloud.google.com/container-builder/docs/curl#send_the_build_request – dyeray

+0

本当にcurlだけを使ってすべてをやりたいのであれば、2つの要求をする必要があります。 1つはGoogle Oauth 2.0エンドポイントを認証して有効なアクセストークンを取得するもの、もう1つは取得したトークンを使用してAPIにコールするものです.Googleはこれを直接使用することを嫌がり、Cloud Resource Manager API more。いずれにせよ、興味のある場合は、--log-httpをgcloudツールに渡すことは、Oauth 2.0エンドポイントへの基本的な要求を確認する良い方法です。 – dyeray

関連する問題