Google OAuth 登録手順 -- Google Auth Platform で Client ID / Secret を発行する

Google OAuth 登録手順 -- Google Auth Platform で Client ID / Secret を発行する

はじめに

Google OAuth の登録は、最初にやるとだいたい迷う。

弊社では、複数カレンダーを統合管理するサービス Missete で Google OAuth を利用し、Google Calendar と連携するカレンダーアプリを作った。

https://missete.app

Client ID を発行するだけなら簡単そうに見えるのに、実際に Google Cloud Console を開くと、BrandingAudienceData AccessClientsVerification Center など似たような設定画面が並んでいる。

しかも、Google ログインだけなのか、Google Calendar や Gmail まで触るのかで、必要なスコープも審査の重さも変わる。リダイレクト URI の末尾に / が付いているだけで redirect_uri_mismatch になったりもする。

この記事では、Web アプリで Google OAuth を使うために、Google Auth Platform で OAuth クライアントを作成する手順をまとめる。

主に想定しているのは、次のようなケース。

  • Google アカウントでログインしたい
  • Google Calendar API を使いたい
  • Google Drive や Gmail などの Google API と連携したい
  • NextAuth.js、Auth.js、Laravel Socialite、Rails OmniAuth などに Google OAuth を設定したい
  • 本番公開前に Google の審査が必要か確認したい

この記事は 2026年5月6日時点の Google Auth Platform の画面構成を前提にしている。Google Cloud Console は画面名や導線が変わることがあるので、実際の画面と少し違う場合は、近い名前のメニューを探してほしい。

まず何を作るのか

今回作るのは、Web アプリ用の OAuth クライアント。

最終的に、アプリ側で次の値を使える状態にする。

GOOGLE_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=xxxxxxxxxxxxxxxx
GOOGLE_REDIRECT_URI=https://example.com/api/auth/callback/google

ブラウザから Google の認可画面へ移動し、ユーザーが同意したあと、アプリ側の callback URL で認可コードを受け取る構成を想定している。

ざっくり言うと、作業は次の4つに分かれる。

作業やること
プロジェクト作成Google Cloud 上にアプリ用の入れ物を作る
同意画面の設定ユーザーに表示されるアプリ名や連絡先を登録する
スコープの設定アプリが使う Google データの権限を登録する
OAuth クライアント作成Client ID / Client Secret と redirect URI を登録する

Google ログインだけなら比較的シンプル。Google Calendar、Drive、Gmail などのユーザーデータにアクセスする場合は、スコープと審査まわりを丁寧に見る必要がある。

事前に決めておくもの

Google Cloud Console を開く前に、次の情報を用意しておくと作業が止まりにくい。

項目使う場所
アプリ名Example Calendar AppOAuth 同意画面
サポートメールsupport@example.comBranding
開発者連絡先developer@example.comBranding
アプリのトップページhttps://example.comBranding
プライバシーポリシーhttps://example.com/privacyBranding / 審査
利用規約https://example.com/termsBranding
本番 callback URLhttps://example.com/api/auth/callback/googleClients
ローカル callback URLhttp://localhost:3000/api/auth/callback/googleClients
使う Google APIGoogle Calendar API などAPI ライブラリ
使うスコープopenid email profile などData Access / アプリ側

プライバシーポリシーは後回しにしがちだが、外部ユーザーに公開するアプリではかなり重要になる。Google API でユーザーデータを扱うなら、どのデータを何のために使うのか、保存するのか、削除依頼をどう受けるのかを書いておく。

全体の流れ

手順は次の順番で進める。

  1. Google Cloud プロジェクトを作成する
  2. 必要な Google API を有効化する
  3. Google Auth Platform を初期設定する
  4. Branding でアプリ情報を設定する
  5. Audience で公開範囲とテストユーザーを設定する
  6. Data Access で OAuth スコープを登録する
  7. Clients で OAuth クライアントを作成する
  8. Authorized JavaScript origins を登録する
  9. Authorized redirect URIs を登録する
  10. Client ID / Client Secret をアプリに設定する
  11. テストユーザーで OAuth フローを確認する
  12. 本番公開前に Verification Center を確認する

最初から本番公開まで一気にやろうとすると、スコープや審査で詰まりやすい。まずはテストユーザーだけで OAuth フローを通し、アプリ側の実装が固まってから公開設定を進めるのが楽。

1. Google Cloud プロジェクトを作成する

まず、OAuth クライアントを置く Google Cloud プロジェクトを作成する。

  1. Google Cloud Console にアクセスする
  2. 画面上部のプロジェクトセレクターをクリックする
  3. 「新しいプロジェクト」をクリックする
  4. プロジェクト名を入力する
  5. 必要に応じて組織や請求先を選択する
  6. 「作成」をクリックする
  7. 作成したプロジェクトを選択する

プロジェクト名は、あとから見て分かる名前にしておく。

環境プロジェクト名の例
開発example-app-dev
ステージングexample-app-staging
本番example-app-production

本番用と開発用は分けておいた方がいい。開発中に redirect URI やスコープを何度も変えるなら、なおさら分けたい。本番プロジェクトでスコープを増やすと、審査やユーザー同意に影響することがある。

2. 必要な Google API を有効化する

Google Calendar、Google Drive、Gmail などの API を使う場合は、対象 API を有効化する。

Google ログインだけで、Google Calendar API などを呼び出さないなら、この手順が不要なケースもある。

  1. 左メニューから「API とサービス」を開く
  2. 「ライブラリ」を開く
  3. 使いたい API 名で検索する
  4. 対象の API を選択する
  5. 「有効にする」をクリックする

よく使う API は次のとおり。

やりたいこと有効化する API
Google Calendar の予定を扱うGoogle Calendar API
Google Drive のファイルを扱うGoogle Drive API
Gmail のメールを扱うGmail API
Google Docs を扱うGoogle Docs API
Google Sheets を扱うGoogle Sheets API

OAuth は通っているのに API 呼び出しだけ 403 Forbidden になる場合、API を有効化していないだけ、ということがある。認証まわりを疑う前に、API ライブラリの状態を確認する。

3. Google Auth Platform を初期設定する

OAuth 同意画面や OAuth クライアントは、Google Auth Platform から設定する。

  1. Google Cloud Console で対象プロジェクトを選択する
  2. 左メニューから「Google Auth Platform」を開く
  3. 「Branding」を開く
  4. 未設定の場合は「Get Started」をクリックする
  5. App name にアプリ名を入力する
  6. User support email を選択する
  7. Audience でアプリの対象ユーザーを選択する
  8. Contact Information に開発者連絡先を入力する
  9. Google API Services User Data Policy を確認する
  10. 「Create」をクリックする

ここで設定する App name は、ユーザーが Google の同意画面で見る名前になる。開発中の仮名をそのまま本番に出さないように注意する。

User support email はユーザー向けの問い合わせ先。Contact Information は Google からの通知先。どちらも、実際に確認できるメールアドレスを使う。

4. Branding でアプリ情報を設定する

Branding では、ユーザーに見えるアプリ情報を設定する。

確認する項目は次のとおり。

項目内容
App nameOAuth 同意画面に表示されるアプリ名
User support emailユーザー向けの問い合わせ先
App logo同意画面などに表示されるロゴ
App domainアプリ URL、プライバシーポリシー、利用規約
Authorized domainsOAuth で利用するドメイン
Developer contact informationGoogle からの通知先

外部ユーザーに公開するなら、少なくとも次のページは用意しておきたい。

  • アプリのトップページ
  • プライバシーポリシー
  • 利用規約

Authorized domains には、OAuth で使うドメインを登録する。

本番 URL が https://example.com なら、Authorized domains は example.comhttps:// やパスは入れない。

URLAuthorized domains に入れる値
https://example.comexample.com
https://app.example.comexample.com
https://staging.example.comexample.com

ドメイン所有権の確認が必要になることもある。審査まで進めるなら、Google Search Console などでドメイン確認できる状態にしておく。

5. Audience で公開範囲を設定する

Audience では、この OAuth アプリを誰が使えるかを決める。

選択肢は主に2つ。

User type用途
InternalGoogle Workspace 組織内のユーザーだけが使う
External任意の Google アカウントで使う

個人の Gmail アカウントや社外ユーザーにも使ってもらうなら、通常は External を選ぶ。

Internal は Google Workspace 組織内向け。組織外のアカウントでログインすると org_internal エラーになる。一般公開サービスでは、ここを Internal にしてしまうと外部ユーザーが使えない。

External のアプリは、最初は Testing の状態で使う。Testing の状態では、登録したテストユーザーだけが OAuth フローを通過できる。

Testing は開発中には便利だが、本番運用向けではない。テストユーザー数や認可の有効期間に制限があるため、外部ユーザーに継続利用してもらうなら In production への移行と、必要に応じた OAuth Verification を考える。

6. テストユーザーを追加する

開発中は、OAuth を試す Google アカウントをテストユーザーに追加する。

  1. Google Auth Platform の「Audience」を開く
  2. Test users の「Add users」をクリックする
  3. テストに使う Google アカウントのメールアドレスを入力する
  4. 「Save」をクリックする

テストユーザーに追加していないアカウントでログインすると、未確認アプリの警告で止まったり、先に進めなかったりすることがある。

OAuth の動作確認で使うアカウントと、Test users に追加したメールアドレスが一致しているかをまず見る。会社アカウントと個人アカウントを切り替えながら試していると、ここで地味に迷う。

7. Data Access で OAuth スコープを登録する

Data Access では、アプリが要求する OAuth スコープを登録する。

スコープは、アプリがユーザーのどのデータにアクセスするかを表す権限。Google の審査では、必要以上に広いスコープを要求していないかが見られる。

  1. Google Auth Platform の「Data Access」を開く
  2. 「Add or Remove Scopes」をクリックする
  3. アプリで利用するスコープを選択する
  4. 必要なスコープが一覧にない場合は手動で追加する
  5. 追加したスコープを確認する
  6. 「Save」をクリックする

Google ログインだけなら、よく使うのはこのあたり。

スコープ用途
openidOpenID Connect を使う
emailメールアドレスを取得する
profile名前やプロフィール画像などの基本情報を取得する

Google Calendar 連携では、たとえば次のスコープを使う。

スコープ用途
https://www.googleapis.com/auth/calendar.freebusyカレンダーの空き時間情報を見る
https://www.googleapis.com/auth/calendar.events.freebusyアクセス可能なカレンダーの空き時間情報を見る
https://www.googleapis.com/auth/calendar.events.readonly予定を読み取る
https://www.googleapis.com/auth/calendar.events予定を読み書きする
https://www.googleapis.com/auth/calendar.readonlyカレンダー情報を読み取る
https://www.googleapis.com/auth/calendarカレンダー全体を読み書き、共有、削除する

基本は、必要最小限のスコープを選ぶ。

予定の空き時間だけ分かればいいなら、いきなり https://www.googleapis.com/auth/calendar を要求しない。予定を作成、更新したいなら https://www.googleapis.com/auth/calendar.events を検討する。カレンダーの共有設定まで触らないなら、広いスコープは避ける。

アプリ側で OAuth リクエストに含めるスコープと、Data Access に登録するスコープはそろえておく。ここがずれると、審査時の説明と実際の挙動が合わなくなる。

8. Clients で OAuth クライアントを作成する

次に、Web アプリ用の OAuth クライアントを作成する。

  1. Google Auth Platform の「Clients」を開く
  2. 「Create Client」をクリックする
  3. Application type で「Web application」を選択する
  4. Name に管理用の名前を入力する
  5. Authorized JavaScript origins を入力する
  6. Authorized redirect URIs を入力する
  7. 「Create」をクリックする

Name は Google Cloud Console 上で管理するための名前。ユーザーには表示されない。

環境ごとに分けるなら、次のような名前にすると見分けやすい。

環境Name の例
ローカル開発Example App Local
ステージングExample App Staging
本番Example App Production

OAuth クライアントを環境ごとに分けると、ローカル用の localhost 設定を本番用 Client に混ぜなくて済む。

9. Authorized JavaScript origins を登録する

Authorized JavaScript origins には、ブラウザから OAuth 関連のリクエストを送るオリジンを登録する。

オリジンは、スキーム、ホスト、ポートまで。パスは含めない。

環境
ローカル開発http://localhost:3000
Vite などのローカル開発http://localhost:5173
ステージングhttps://staging.example.com
本番https://example.com

ここに callback URL を丸ごと入れない。

https://example.com/api/auth/callback/google

Authorized JavaScript origins に入れるのは、次の形式。

https://example.com

フロントエンドとバックエンドのドメインが違う場合は、実際にブラウザ側で使うオリジンを確認して登録する。

10. Authorized redirect URIs を登録する

Authorized redirect URIs には、Google の認可画面を通過したあとに戻ってくる callback URL を登録する。

環境
ローカル開発http://localhost:3000/api/auth/callback/google
ステージングhttps://staging.example.com/api/auth/callback/google
本番https://example.com/api/auth/callback/google

ここはかなり大事。アプリ側の redirect_uri と Google Cloud Console 側の Authorized redirect URIs は完全一致している必要がある。

次の違いは、すべて別物として扱われる。

見るところ
スキームhttphttps
ドメインexample.comwww.example.com
ポートlocalhost:3000localhost:5173
パス/callback/google/api/auth/callback/google
末尾の //google/google/
大文字小文字/Google/google

たとえば、Google Cloud Console にこれを登録しているとする。

https://example.com/api/auth/callback/google

アプリ側が次のように末尾の / 付きで送ると、合わないことがある。

https://example.com/api/auth/callback/google/

この場合は redirect_uri_mismatch になる。

認証ライブラリを使う場合は、ライブラリが期待する callback URL をそのまま登録する。

ライブラリ / 構成callback URL の例
NextAuth.js / Auth.jshttps://example.com/api/auth/callback/google
Laravel Socialitehttps://example.com/auth/google/callback
Rails OmniAuthhttps://example.com/auth/google_oauth2/callback
独自実装アプリ側で指定した redirect_uri

11. Client ID / Client Secret を保存する

OAuth クライアントを作成すると、Client ID と Client Secret が発行される。

サーバー側で認可コードをアクセストークンに交換する Web アプリでは、通常この2つを環境変数に入れる。

GOOGLE_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=xxxxxxxxxxxxxxxx

Client Secret はサーバー側だけで扱う。フロントエンドの JavaScript に埋め込まない。公開リポジトリにもコミットしない。

作成直後の画面で Client Secret をコピーし忘れた場合や、漏えいした可能性がある場合は、新しい Secret を作成して差し替える。

ブラウザだけで完結する Google Identity Services の構成では、Client Secret を使わないことがある。Secret を安全に保持できない場所には置かない。

12. アプリ側に OAuth 設定を入れる

Google Cloud Console 側の登録が終わったら、アプリ側に値を設定する。

例としては次のようになる。

GOOGLE_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=xxxxxxxxxxxxxxxx
GOOGLE_REDIRECT_URI=https://example.com/api/auth/callback/google
GOOGLE_OAUTH_SCOPES=openid email profile https://www.googleapis.com/auth/calendar.events

OAuth リクエストでよく使うパラメータは次のとおり。

パラメータ内容
client_idGoogle Cloud Console で発行した Client ID
redirect_uri登録済みの redirect URI
response_typeWeb サーバーアプリでは通常 code
scope要求するスコープ
stateCSRF 対策用のランダムな値
access_typeリフレッシュトークンが必要なら offline
include_granted_scopes段階的な権限追加をするなら true
prompt再同意が必要な場合に consent を指定することがある

ユーザーがいない状態でも Google API を呼び続けたいなら、リフレッシュトークンが必要になる。その場合は access_type=offline を指定する。

ただし、リフレッシュトークンは毎回返るものではない。初回同意時だけ返るケースがあるため、再取得が必要な場合は再同意フローを用意しておく。

13. テストユーザーで動作確認する

設定が終わったら、Audience に追加したテストユーザーで OAuth フローを確認する。

見るポイントは次のとおり。

確認項目見る内容
アカウント選択Google のアカウント選択画面に遷移するか
同意画面アプリ名とスコープが想定どおりか
callback登録した redirect URI に戻ってくるか
認可コードアプリ側で code を受け取れているか
トークン交換アクセストークンを取得できるか
API 呼び出し必要な Google API を呼べるか
リフレッシュ必要ならリフレッシュトークンを保存できるか

ここで失敗した場合、いきなりコードを疑う前に次を見る。

症状まず見る場所
テストユーザーなのに進めないAudience の Test users
callback に戻らないAuthorized redirect URIs
API だけ失敗するAPI の有効化とスコープ
アプリ名が変Branding
未確認アプリ警告が出るVerification Center

14. 本番公開前に Verification Center を確認する

外部ユーザーに提供するアプリでは、本番公開前に Verification Center を確認する。

Google API のスコープには、非センシティブ、センシティブ、制限付きの分類がある。Calendar、Drive、Gmail などのユーザーデータにアクセスするスコープでは、OAuth Verification が必要になることがある。

  1. Google Auth Platform の「Verification Center」を開く
  2. Branding の確認状況を見る
  3. Data Access の確認状況を見る
  4. 必要なスコープの使用理由を書く
  5. プライバシーポリシーやアプリ URL を確認する
  6. 必要に応じてデモ動画を用意する
  7. 審査申請を送信する

センシティブスコープの審査では、次のようなものを求められることがある。

項目内容
アプリ概要何をするアプリか
スコープの使用理由なぜその権限が必要か
ユーザー操作の説明ユーザーがどこで連携するか
デモ動画OAuth 同意から API 利用までの流れ
プライバシーポリシーデータの利用目的や削除方法
ドメイン所有権アプリのドメインを管理している証明

審査は数営業日で終わることもあるが、説明不足、動画不足、プライバシーポリシーの不備があると追加対応で長引く。

申請方法が誤っていると、単に差し戻されるだけでは済まない。確認する側がアプリの用途やスコープの必要性を判断できず、やり取りが増え、結果として審査の優先度が下がったような状態になりやすい。急いでいるときほど、とりあえず申請するのではなく、スコープの理由、操作手順、デモ動画、公開ページをそろえてから出す。

制限付きスコープの場合は、さらに厳しい確認やセキュリティ評価が必要になることがある。Gmail や Drive の広い権限を扱う場合は、早めに確認しておく。

スコープ選びの考え方

Google OAuth では、できるだけ狭いスコープを選ぶ。

Google Calendar 連携を例にすると、だいたい次のように考える。

要件候補スコープ
空き時間だけ取得したいhttps://www.googleapis.com/auth/calendar.freebusy
予定の詳細ではなく空き時間だけ扱いたいhttps://www.googleapis.com/auth/calendar.events.freebusy
予定一覧を読みたいhttps://www.googleapis.com/auth/calendar.events.readonly
予定を作成、更新、削除したいhttps://www.googleapis.com/auth/calendar.events
カレンダー一覧を読みたいhttps://www.googleapis.com/auth/calendar.calendarlist.readonly
カレンダー自体の設定を変更したいhttps://www.googleapis.com/auth/calendar.calendars
カレンダーの共有権限も扱いたいhttps://www.googleapis.com/auth/calendar.acls

単に予定を作成したいだけなら、カレンダー全体の共有や削除まで可能な https://www.googleapis.com/auth/calendar を要求しなくてよいことが多い。

ユーザーから見ても、必要以上に広い権限を求められると不安になる。審査のためだけでなく、ユーザーに納得して連携してもらうためにも、権限は絞る。

よくあるエラー

Google OAuth 登録でよく見るエラーをまとめる。

症状原因と対処
redirect_uri_mismatchアプリ側の redirect_uri と Authorized redirect URIs が完全一致していない。末尾の /、ポート、http / https を確認する
org_internalUser type が Internal になっている。一般公開アプリなら External にする
access_deniedユーザーが同意をキャンセルした、または Workspace 管理者がスコープを制限している
invalid_clientClient ID / Client Secret が間違っている、または削除済みの OAuth クライアントを使っている
invalid_grant認可コードやリフレッシュトークンが期限切れ、使用済み、または無効になっている
403 ForbiddenAPI が有効化されていない、スコープが不足している、Workspace 管理者に制限されている
「このアプリは確認されていません」センシティブまたは制限付きスコープを使っており、OAuth Verification が未完了
リフレッシュトークンが返らないaccess_type=offline を指定していない、または過去に同意済み。再同意フローを確認する

redirect_uri_mismatch は本当によく出る。Google Cloud Console 側とアプリ側の URL を、文字列としてそのまま見比べるのが一番早い。

セキュリティ上の注意

OAuth クライアントを運用するときは、次の点に注意する。

注意点理由
Client Secret をフロントエンドに置かないブラウザ上の値はユーザーから見える
Client Secret を Git にコミットしない公開リポジトリから漏えいする
本番用と開発用の Client を分ける設定変更の影響範囲を分けられる
不要な redirect URI を消す使わない戻り先を残さない
不要なスコープを消すユーザー同意と審査の負担を減らせる
state を使うCSRF 対策になる
トークンを安全に保存するGoogle API へのアクセス権そのものだから
連携解除の導線を用意するユーザーが後から取り消せるようにする

OAuth は「ログインできたら終わり」ではない。ユーザーの Google アカウントデータにアクセスするための仕組みなので、何を許可してもらい、どう扱い、どう解除できるのかまで設計する。

まとめ

Google OAuth 登録でやることは多いが、分解すると次の流れになる。

  1. Google Cloud プロジェクトを作る
  2. 必要な API を有効化する
  3. Google Auth Platform で Branding を設定する
  4. Audience で公開範囲とテストユーザーを設定する
  5. Data Access でスコープを登録する
  6. Clients で Web application の OAuth クライアントを作る
  7. Authorized JavaScript origins と Authorized redirect URIs を登録する
  8. Client ID / Client Secret をアプリ側に設定する
  9. テストユーザーで OAuth フローを確認する
  10. 本番公開前に Verification Center を確認する

特に大事なのは、redirect URI を完全一致させることと、必要最小限のスコープを選ぶこと。

Google ログインだけなら比較的軽いが、Calendar、Drive、Gmail などのユーザーデータを扱う場合は、プライバシーポリシー、スコープの利用理由、デモ動画、ドメイン所有権の確認まで早めに準備しておくと進めやすい。申請内容が雑だと確認に時間がかかり、リリース直前の作業ほど後回しになりやすい。

弊社の Missete でも、Google OAuth を使って Google Calendar と連携し、複数カレンダーを扱うカレンダーアプリを開発している。OAuth 登録や審査準備は一度通れば終わりではなく、スコープ変更や本番公開のタイミングでまた確認が必要になるため、最初から手順を整理しておく価値がある。

参考リンク


この記事に関連するサービス

TodoONada株式会社では、認証基盤・ID管理の設計から開発・移行までを支援しています。

導入・開発のご相談はお問い合わせからお気軽にどうぞ。検討段階のご相談も歓迎です。

技術ブログ一覧へ戻る