タイトルのとおり、GCP上でウェブアプリケーションとしての認証を通してTokenおよびRefresh Tokenの取得をする手順をまとめました。
先にざっくりと手順をまとめておきます。以降はその詳細です。
- GCPのプロジェクトでOAuthクライアントID・認証情報を作成する
- Google DevelopersのOAuth 2.0 Playgroundを利用してログインしているGoogleアカウントのIAMで認証し、トークンを取得する
GCPのサービスアカウントを使用して認証を通す方法ではありません。
ご理解のうえ、以降の手順を参考にしてください。
OAuthクライアントID・認証情報を作成する
まず、GCPのコンソールを開き、トークンを使用するプロジェクトを開きます。
GCPの管理画面を開いたら、ナビゲーションメニューの[APIとサービス] > [認証情報] ページを開いてください。
(管理画面は色々な情報が含まれますので、画像は記載できません。あしからず)
[+認証情報を作成]をクリックし、[OAuthクライアントID]を選択
設定ページでは、以下の情報を入力して作成してください。
・アプリケーションの種類:ウェブアプリケーション
・名前:任意
・承認済みのJavaScript生成元:ブランクでOK
・承認済みのリダイレクトURI:https://developers.google.com/oauthplayground
OAuthクライアントIDが作成されたら、Additional information欄に記載されているクライアントIDとクライアントシークレットをコピーして控えておきます。
この情報がトークンを取得するのに必要なものになります。
OAuth 2.0 Playgroundでトークンを取得する
リダイレクトURIにも設定しているGoogle DevelopersのOAuth 2.0 Playgroundを開きます。
このとき、アクセスするGoogleアカウントは間違えないようにしましょう。
画面が開かれたら、まずは右上の歯車マークをクリック
下部にある「Use your own OAuth credentials」チェックボックスを選択します。
OAuth Client IDとOAuth Client secretの入力欄が出てくるので、先ほど控えておいたクライアントIDとクライアントシークレットを入力し、Closeをクリックします。
ここから実際に認証を通してトークンを取得していきましょう。
Step 1 Select & authorize APIsでは、アプリケーションに必要なスコープを選択します。
一覧から必要なものをチェックしていく形で選ぶのですが、こちらはそれぞれの実装に応じて、利用するGCPのサービスに必要なスコープを選択しましょう。
選択したら[Authorize APIs]ボタンをクリックして、アカウント認証と権限の許可を行います。
※たまに一覧から見つからないものもあるため、その場合はAuthorize APIsボタン横のインプットボックスに直接記入しましょう(カンマ区切りで複数指定できました)
無事通るとStep 2 Exchange authorization code for tokensに自動で移動するはずです。
Step 2 Exchange authorization code for tokensに進んだら、あとはトークンを取得するだけです。
当該画面にAuthorization codeが自動で入力されているので、[Exchange authorization code for tokens]ボタンを押します。
すると下の欄にAccess tokenとRefresh tokenが出力されます。
このTokenとRefresh tokenをアプリケーションで使用しましょう。
なお、トークンをコピーする前に自動でStep 3の画面へ移動してしまうと思うので、その時は「Step 2 Exchange authorization code for tokens」をクリックすると戻れます。
これで作業は完了です。
トークンが期待するものか確認したい場合は、Step 3 Configure request to APIでトークンを利用したHTTPリクエストができるので、確認してみると良いでしょう。
何が問題かわからないことが多いので注意
最後におまけですが、取得したトークンを使用してアプリケーションからGCPへリクエストをしてもエラーになることはかなりあります。
その際、パーミッションエラーとしか言われないので結構悩みのでご注意ください。
どんな権限が足りないかなどのヒントを与えると、悪意を持ってアクセスしようとするユーザに情報を与えることになってしまうからなのかなと思っています。
私はがつまずいたケースだと、アプリ→GAS(実行可能API)→Cloud Functionsという流れの処理をしようとしたらパーミッションエラーになり、GAS→Cloud Functionsの処理はサービスアカウントを使って処理するようにしたらエラーが解消されたなんてものもあります。
認証周りは深い知識が必要でベテランさん以外は悩むことの多い領域だと思いますが、頑張ってセキュアかつ便利なものを開発していきたいですね!
コメント
コメント一覧 (1件)
[…] GCPでウェブアプリケーションの認証を通してトークンを取得する […]