| この記事の要点 |
|
Google OAuth 2.0 のエラーレスポンス
Google の OAuth 2.0 エンドポイント(accounts.google.com/o/oauth2/v2/auth や oauth2.googleapis.com/token)が返すエラーは、RFC 6749 で定められた error / error_description の形式で返ります。原因究明には error_description と Cloud Console の OAuth クライアント設定の突き合わせが基本です。
// token エンドポイントの例
{
"error": "invalid_grant",
"error_description": "Token has been expired or revoked."
}
主要エラー一覧と対処
| error | 意味 | 主な原因 / 対処 |
|---|---|---|
invalid_request | パラメータ不足 / 形式不正 | 必須パラメータ(client_id, redirect_uri, response_type, scope)の漏れ。スペル / URL エンコードを確認 |
invalid_client | クライアント認証失敗 | client_id / client_secret の値が違う。シークレットを再生成して環境変数を更新 |
invalid_grant | 付与情報が無効 | リフレッシュトークン失効、認可コードを 2 回使った、コード期限切れ(数十秒)、ユーザがパスワード変更、未公開アプリで 7 日経過、時刻ずれ |
unauthorized_client | クライアントが許可されていない | そのクライアントタイプに許可されていないグラントを使った。Cloud Console のアプリ種別を確認 |
unsupported_grant_type | 未対応 grant_type | サポートされる: authorization_code / refresh_token / urn:ietf:params:oauth:grant-type:jwt-bearer |
invalid_scope | スコープ不正 | スコープ文字列のスペル誤り、有効化していない API のスコープ要求 |
access_denied | ユーザが同意を拒否 | 同意画面で「許可しない」を押した。アプリ未公開で対象外ユーザがログインした場合も発生 |
redirect_uri_mismatch | リダイレクト URI 不一致 | Cloud Console の「承認済みリダイレクト URI」と完全一致していない。プロトコル / ポート / 末尾スラッシュ / クエリすべて含む |
admin_policy_enforced | Workspace 管理者が制限 | 組織管理者がアプリを許可していない |
disallowed_useragent | 埋め込み WebView 拒否 | WebView / 古い UA からのログインは 2021 年以降不可。システムブラウザを使う |
org_internal | 組織内ユーザ限定 | 「内部」公開設定のアプリに組織外ユーザがアクセス |
deleted_client | 削除済みクライアント | Cloud Console で削除した client_id を使っている |
idpiframe_initialization_failed | 旧 GIS / GAPI クライアント側 | サードパーティ Cookie 無効化など。新 GIS(Google Identity Services)に移行 |
頻発: redirect_uri_mismatch
OAuth 開発で最も詰まるのがこれです。Google は文字列の完全一致を見ています。
| Cloud Console 登録 | リクエスト URI | 結果 |
|---|---|---|
http://localhost:3000/callback | http://localhost:3000/callback | OK |
http://localhost:3000/callback | http://localhost:3000/callback/ | NG(末尾スラッシュ) |
http://localhost:3000/callback | http://127.0.0.1:3000/callback | NG(ホスト名違い) |
https://app.example.com/cb | http://app.example.com/cb | NG(プロトコル違い) |
頻発: invalid_grant
下記いずれかで起きます。とくにリフレッシュトークンの失効条件を覚えておくとよいです。
- 認可コードを2 回トークンエンドポイントに送った
- 認可コードの有効期限切れ(数十秒〜数分)
- ユーザがパスワードを変更した、または「アカウントへのアクセス権を取り消し」した
- 未公開(テスト)アプリのリフレッシュトークンは7 日で失効
- サーバの時刻ずれ(JWT で
iat/expが不整合) - 1 ユーザあたり 100 個を超えるリフレッシュトークンを発行(古いものから失効)
同意のリセットと再取得
スコープを追加した、または失効したリフレッシュトークンを取り直したいときは、認可リクエストに prompt=consent と access_type=offline を付けます。
https://accounts.google.com/o/oauth2/v2/auth
?client_id=...
&redirect_uri=https://app.example.com/oauth/callback
&response_type=code
&scope=openid%20email%20profile
&access_type=offline (リフレッシュトークン要求)
&prompt=consent (毎回同意画面を出して再発行)
&state=xxxxxxxx
デバッグの手順
errorとerror_descriptionを必ずログに残す- Cloud Console の OAuth クライアント設定(種別 / 承認済み JS 元 / 承認済みリダイレクト URI)を再確認
- 使っているスコープに対応する API が「有効な API とサービス」で有効化されているか
- 未公開アプリならテストユーザに対象 Google アカウントを追加
- サーバ時刻が NTP で同期されているか確認
関連
- Google OAuth 2.0 — 親記事
- OAuth 2.0 — 標準仕様(RFC 6749)
- OpenID Connect — 認証層
- Google Cloud Console — クライアント管理
子ページ
同階層のページ
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09