MENU
目次

サルでも分かるアクセストークン/リフレッシュトークンを取得する方法【GoogleCloudConsoleでのOAuth2.0認証情報作成】

サルでも分かるリフレッシュトークン・アクセストークン取得方法

この記事ではサルでも分かるように解説します

GASで作成したWebアプリを使用するためにトークンを取得する場合は、以下の記事の方が手順が少なくて楽です。

あわせて読みたい
GASでアクセストークン/リフレッシュトークンを取得する方法【GoogleCloudPlatform】 この記事では アクセストークン/リフレッシュトークンの違いが分かる デプロイしたGASアプリをAPI実行するためのトークン取得方法が分かる 汎用的に使えるアクセス/リフ...

GAS以外のアプリでGoogleAPIを叩きたい場合は、この記事を読んでください!

目次

リフレッシュトークン/アクセストークンって何?

迷える子羊

アクセス?リフレッシュ?違いがよく分からないな

現役エンジニア

そんなアナタに前提知識を超簡単に解説します

アクセストークンは、Webサービスにアクセスするための鍵のことです。
リフレッシュトークンは、アクセストークンを取得するための鍵のことです。

アクセストークンは取得しても短時間で期限切れになるので、リフレッシュトークンで再発行してあげる必要があるんですね。

笑顔の子羊

リフレッシュトークンでアクセストークンを取得するのか

現役エンジニア

そうです。そしてアクセストークンでサービスにアクセスします

公式ドキュメント

この記事では以下の3ステップで、アクセストークン/リフレッシュトークンを取得する方法について、サルでも分かるように丁寧に解説します!

STEP

前準備として、Google側の設定を行います。

STEP

アクセストークン/リフレッシュトークンを取得するための認可コードを取得します。

STEP

STEP①②で取得した情報から、アクセス/リフレッシュトークンを取得します。

STEP①:GoogleCloudConsoleでOAuth 2.0認証情報を取得する

迷える子羊

ちょっと言ってる意味が分かりません

現役エンジニア

サルでも分かるように手順を解説します!

この章のゴールは

  • GoogleCloudConsoleでOAuthクライアントID、クライアントシークレットが取得できること
  • 使用したいAPIを有効化できること

よってこの2点が完了済みの方は、STEP②認可コード取得へ進んでください。

1-1 GoogleCloudConsoleでプロジェクトの作成/選択

現役エンジニア

すでにGoogleCloudConsoleでプロジェクトを作成済みの方は、飛ばしてOKです。

GoogleCloudConsoleにアクセスしましょう。

以下の画像のように新しいプロジェクトを作成します。
※「GeminiAPI」という文字は私のプロジェクト名なので、ここは違う文字になっているはずです。

新しいプロジェクトをクリック

適当なプロジェクト名を付けて作成をクリックします。

プロジェクト名を設定して作成

画面上部のプロジェクト名を確認し、先ほど作成したプロジェクトになっていることを確認しましょう。
もし違う名前なら、プロジェクト名をクリックして切り替えます。

作成したプロジェクトが選択されているか確認する

1-2 APIの有効化

「APIとサービス」をクリックします。

「APIとサービス」をクリック

「ライブラリ」をクリックします。
自分が使用したいAPIを検索して有効化してください。

ライブラリをクリックし、
自分が使用したいAPIを検索して有効化

私は生成AI「Gemini」のAPIを使いたいので、Geminiと検索しました。
以下のように対象APIを「有効化」します。

GeminiAPIを有効化

1-3 OAuth2.0で同意画面を構成

「認証情報」→「認証情報を作成」→「OAuthクライアントID」の順にクリックします。

「認証情報」「認証情報を作成」「OAuthクライアントID」の順にクリック

「同意画面を構成」をクリックします。

同意画面を構成をクリック

「開始」をクリックします。

開始をクリック

以下の項目を入力し、次へボタンをクリックします。

  • アプリ名:適当にアプリ名を付けておきましょう
  • ユーザーサポートメール:アプリの問い合わせ先になるメールアドレスです。適当な自分のメアドでOKです。
アプリ名とユーザーサポートメールを記載し次へ

このアプリを誰に公開するか選択します。
内部・外部の違いは以下の通りです。

内部

自社や団体など特定の組織内のユーザーだけが利用するアプリ向けです。

  • 利用できる人: 組織に所属するメンバーのみ
  • 審査: アプリの公開前に改めて「確認依頼」を出す必要はありません
外部

外部のユーザー(Googleアカウントを持っている一般の方)でも利用できるアプリ向けです。

  • 利用できる人: テストユーザーとしてリストに加えたGoogleアカウントを持つ方
  • 審査: 本格的に公開する際、Googleからの確認(審査)が必要になる場合があります

私の個人アカウントは組織に所属していないので「外部」にします。

迷える子羊

外部にすると誰でもアクセスできるの?

現役エンジニア

テストユーザーに登録した人に限定できます(手順は後述)

外部をクリックして次へ

連絡先は適当に自分のメールアドレスを登録ください。

最後にポリシーに同意して、作成をクリックします。

1-4 OAuth2.0でクライアントIDを作成

「OAuthクライアントを作成」をクリックします。

以下の手順で、OAuthクライアントIDを作成してください。

  • アプリケーションの種類を「ウェブアプリケーション」に設定します。
    ※モバイルアプリなどの場合は、適切なアプリケーションタイプを選択してください
  • 名前は任意で入力します。
  • 承認済みのリダイレクトURIに、認可後にユーザーが戻るURLを入力します。
    (例:http://localhostや実際に構築するコールバックURI)
  • 「作成」をクリック
迷える子羊

承認済みのリダイレクトURIって何を設定すればいいの?

現役エンジニア

特に指定したいURLがない場合は「http://localhost」でOKです!

OAuthクライアントIDを作成するための情報を入力

作成をクリックすると、「クライアントID」と「クライアントシークレット」が取得できます。
後続処理で使うので、メモしておきましょう。

クライアントIDとクライアントシークレットを取得できた
この情報は後続処理で使います

1-5 テストユーザーの追加

このアプリにアクセスできるユーザーを指定しましょう。

「対象」メニューを開いて、テストユーザー欄の「+AddUsers」をクリックします。

テストユーザーの追加画面に遷移する

ユーザー追加画面が表示されたら、自分が使用するGoogleメールアドレス記載して保存しましょう。

テストユーザーのメールアドレスを追加する
Googleアカウントのメールアドレスを追加しましょう
現役エンジニア

これでSTEP①は完了です!

STEP②:認可コードの取得

アクセス/リフレッシュトークンを取得するためには、一時的な認可コードを得る必要があります。
この認可コード取得の際に、先ほど構成したOAuth同意画面を使用します!

この章のゴールは

  • 認可コードを取得すること

よって認可コードを既に取得済みの方は、STEP③アクセストークンを取得するへ進んでください。

2-1 認可リクエストURLの作成

認可コードを取得するためのURLを作成しましょう。

URLのテンプレートがこちらです。(このままでは使えません)

Bash
https://accounts.google.com/o/oauth2/v2/auth?
  client_id={あなたのクライアントID}&
  redirect_uri={STEP1で設定したリダイレクトURI}&
  response_type=code&
  scope={使用したいAPIを実行するために必要なスコープ}&
  access_type=offline&
  prompt=consent

各パラメーターについて解説します。

1. EndPoint(必須)

Googleの認可リクエストを開始するための基本的なURLです。
https://accounts.google.com/o/oauth2/v2/authで固定です。

2. client_id(必須)

STEP①の1-4で取得したクライアントIDを設定しましょう。

3. redirect_uri(必須)

STEP①の1-4で指定したリダイレクトURIを設定しましょう。

4. response_type(必須)

認可コードを取得することを示すパラメーターです。固定でOKです。

5. scope(必須)

アクセスしたいリソースに対応するスコープを指定します。
複数の場合は%20で区切ります。

例えばユーザーのメールアドレスやプロフィール情報を取得する場合は、「https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile」を指定します。

6. access_type(省略可能:リフレッシュトークンを取得するなら必須)

2つのオプションがあります。リフレッシュトークンを取得する場合はテンプレート固定でOKです。

  • offline:リフレッシュトークンを取得します
  • online:リフレッシュトークンを取得しません(規定値)
7. prompt(省略可能)

4つのオプションがあります。

  • consent:常に同意画面を表示させる
  • select_account:ユーザーにアカウント選択をさせる
  • none:ユーザーに一切の操作を求めない(未ログイン、権限不足の場合はエラー)
  • 省略する:ユーザーの状況に応じた標準的な認証フローが実行される

よく分からない場合は、テンプレートのままでOKです。

8. state(省略可能)

CSRF攻撃を防ぐためのパラメーターです。CSRF攻撃とは、悪意のある第三者がユーザーになりすまして、意図しない操作をさせる攻撃です。
ややこしいので今回は省略します。

迷える子羊

「5. scope」の%20で区切るってどういうこと?

現役エンジニア

本来はスペースで区切るのですが、URLにスペースを入れるとエラーになります。なのでスペースをエンコードして「%20」にしています。

スコープについては死ぬほど種類があるので、公式ドキュメントを見るか、必要なスコープをググってください。
https://developers.google.com/identity/protocols/oauth2/scopes?hl=ja

私はGeminiAPIを使うので、以下のようなリクエストURLを作成しました。

Bash
https://accounts.google.com/o/oauth2/v2/auth?
  client_id={シークレットIDは非公開}.apps.googleusercontent.com&
  redirect_uri=http://localhost&
  response_type=code&
  scope=https://www.googleapis.com/auth/generative-language.tuning&
  access_type=offline&
  prompt=consent

2-2 リクエストURLから認可コードを取得する

ブラウザのタブを開き、先ほど作成したURLにアクセスします。

リクエストURLにアクセス

自身のGoogleアカウントを選択・ログインしてください。

以下の画面が表示されたら「続行」→「続行」と進みます。
2つ目の画面で「〇〇を許可する」みたいなチェックボックスがあれば、チェックをいれましょう。

OAuth同意画面の処理を進める

上記画面が表示されずエラーになる場合、ここまでの設定に不備があります。
よくあるエラーも参考にしてください。

続行すると以下の画面が表示されるので、URLをコピーしてください。
このURLに認可コードが含まれています!

認可コードが含まれているURLを取得する

取得できるURLの構成です。認可コードの部分を保存しておきましょう。

取得できるURL例
http://localhost/?code={認可コード}&scope=https://www.googleapis.com/auth/generative-language.tuning
現役エンジニア

これでSTEP②認可コードの取得は完了です!

現役エンジニア

次が最後です。トークンを取得しましょう!

STEP③:アクセストークン/リフレッシュトークンを取得する

取得した認可コードを使って、Googleのエンドポイントにリクエストを送り、アクセストークンとリフレッシュトークンを受け取ります。

迷える子羊

エンドポイントって何?

現役エンジニア

あるサービスや機能を利用したいときに、どこにアクセスすれば良いのかを示す「住所」のようなものです。

エンドポイントに対してリクエストを送信することで、サーバー側の機能を利用したり、データを取得したりすることができます。今回はGoogleのOAuth2.0認証を開始するためのエンドポイントを使用して、OAuth認証を通します。

ちなみにGoogleのTokenエンドポイントは以下のURLです。

Bash
https://www.googleapis.com/oauth2/v4/token

3-1 コマンドプロンプト(ターミナル)を開く

これからcURLという機能を使って、GoogleのエンドポイントにHTTPリクエストを送信します。
そうするとリフレッシュ/アクセストークンを取得できます。

迷える子羊

cURL?どうやって使うのかさっぱり分かりません

現役エンジニア

cURLはネット上の情報を取得できるツールと思ってください

現役エンジニア

コマンドプロンプト(Macならターミナル)で実行できます

cURLはコマンドラインから手軽にウェブや、その他のネット上のリソースとやり取りするための便利なツールです。特に開発者やシステム管理者にとって、APIのテストやスクリプトによる自動化などで広く利用されています。

ということで、コマンドプロンプトを起動しましょう。
Windowsの検索バーに「コマンドプロンプト」と入力し、表示された結果をクリックします。

Windows検索バーからコマンドプロンプトを起動する
こんな画面が起動すればOK

3-2 コマンドを実行してアクセス/リフレッシュトークンを取得

GoogleのTokenエンドポイントに、POSTリクエストを送信します。コマンドのテンプレートは以下の通りです。

Bash
curl -X POST "https://www.googleapis.com/oauth2/v4/token" --header "Content-Type: application/x-www-form-urlencoded" --data "code={認可コード}&redirect_uri={リダイレクトURI}&client_id={クライアントID}&client_secret={クライアントシークレット}&grant_type=authorization_code"
現役エンジニア

{変数名}の部分にそれぞれ値を入れていきましょう

テンプレートコードは改行しないでください。エラーの原因になります。

各パラメーターについて解説します。

1. トークンエンドポイント

GoogleのTokenエンドポイントを設定します。テンプレートに以下のURLを挿入済みです。

https://www.googleapis.com/oauth2/v4/token
2. 認可コード

STEP②で取得した「認可コード」を設定します。

3. リダイレクトURI

STEP①で指定したリダイレクトURIを設定します。

4. クライアントID

STEP①で指定したクライアントIDを設定します。

5. クライアントシークレット

STEP①で指定したクライアントシークレットを設定します。

6. グラントタイプ

OAuth 2.0のエンドポイントに送信するリクエストにて、どの方法でアクセストークンを取得するのかを指定するものです。複数のオプションがあります。

  • authorization_code:認可コードとクライアントIDなどを利用して、アクセストークンを取得します。
  • refresh_token:リフレッシュトークンを使用して新しいアクセストークンを取得する際に使用します。
  • password:ユーザー名とパスワードをトークンエンドポイントに送信して、アクセストークンを取得します。
  • client_credentials:クライアントIDなどを利用してアクセストークンを取得します。

今回は「authorization_code」を使用しますので、テンプレートにも設定済みです。

実際に出来上がったコマンドはこちらです。

Bash
curl -X POST "https://www.googleapis.com/oauth2/v4/token" --header "Content-Type: application/x-www-form-urlencoded" --data "code=4/0Ab_5qlk6ImuoK-ebX_Jt5Hv1rd9J7WgsLwInfhcgMU3jf3TPazo6AO-_3xiIlts-2wHEYw&redirect_uri=http://localhost&client_id=195746033599-o0tdp2o253kh100pbs31r212i41f39ci.apps.googleusercontent.com&client_secret=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&grant_type=authorization_code"

これをコマンドプロンプトに貼りつけてEnterキーで送信します。
赤枠が貼りつけたコマンドで、その下がエンドポイントからの応答となります。

コマンドプロンプトを実行するとアクセストークンとリフレッシュトークンを取得できた

ちゃんと「access_token」や「refresh_token」が取得できていますね!

上記画面が表示されずエラーになる場合、ここまでの設定に不備があります。
よくあるエラーも参考にしてください。

戻り値についても簡単に解説します。

  • access_token:アクセストークンは、GoogleCloudにアクセスする一時的な鍵です。
  • expires_in:アクセストークンの有効期限(秒)です。
  • refresh_token:リフレッシュトークンは、新しいアクセストークンを取得するための鍵です。
  • scope:トークンに付与された権限の範囲です。
  • token_type:トークンの種類です。
  • refresh_token_expires_in:リフレッシュトークンの有効期限(秒)です。
笑顔の子羊

アクセストークンとリフレッシュトークンを取得できました!

現役エンジニア

お疲れさまでした!

よくあるエラーと解決方法

現役エンジニア

最後によくあるエラーについて解説します

①認可コード取得時のエラー
アクセスをブロック: Gemini は Google の審査プロセスを完了していません
Gemini は Google の審査プロセスを完了していません。このアプリは現在テスト中で、デベロッパーに承認されたテスターのみがアクセスできます。アクセス権があると思われる場合は、デベロッパーにお問い合わせください。
Gemini のデベロッパーの場合は、エラーの詳細をご確認ください。
エラー 403: access_denied

GoogleCloudConsoleであなたのGoogleアカウントがテストユーザーに追加されていないのが原因です。
Step①の「テストユーザーを追加」の手順を実施ください。

②コマンドプロンプト送信時に発生するエラー
411.That’s an error.POST requests require a Content-length header. That’s all we know.
curl: (3) URL rejected: Bad hostname

コマンドプロンプトに改行が入ってたりして、コマンドが正しく送信できていません。
Step③の「コマンドを実行してアクセス/リフレッシュトークンを取得」のコマンドテンプレートを正しく利用ください。

③コマンドプロンプト送信時に発生するエラー2
{“error”: “invalid_grant”,
“error_description”: “Bad Request”}

複数の原因が考えられます。

Ueda
フリーランスエンジニア
RPAエンジニアです。
UipathやVBAを使用した開発を得意としています。優れた可読性と効率的な設計を併せ持つRPA開発を心がけています。
RPA初心者向けの教育経験多数あり。RPAの開発サポートも承ります。

Wordpressを用いたHP制作のお仕事も経験があります。本サイトもWordpressを用いて制作しております。

ペットのチワプーと暮らしてます。
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次