モバイル &デスクトップ アプリ向け OAuth 2.0

このドキュメントでは、スマートフォン、タブレット、パソコンなどのデバイスにインストールされているアプリケーションが、Google の OAuth 2.0 エンドポイントを使用して YouTube Data API へのアクセスを承認する方法について説明します。

OAuth 2.0 では、ユーザー名やパスワードなどの情報を秘密にしたまま、ユーザーが特定のデータをアプリケーションと共有できます。 たとえば、アプリケーションは OAuth 2.0 を使用して、ユーザーの YouTube チャンネルに動画をアップロードするための権限を取得できます。

インストール済みのアプリはデバイスごとに配布されます。これらのアプリはシークレットを保持できないことを前提としています。ユーザーがアプリを使用しているとき、またはアプリがバックグラウンドで実行されているときに、Google API にアクセスできます。

この承認フローは、ウェブサーバー アプリケーションに使用されるフローと似ています。主な違いは、インストール済みのアプリがシステム ブラウザを開き、Google の認証サーバーからのレスポンスを処理するためのローカル リダイレクト URI を指定する必要があることです。

代案

モバイルアプリの場合は、Android または iOS で Google ログインを使用することをおすすめします。Google ログイン クライアント ライブラリは認証とユーザー認可を処理します。これらは、ここで説明する下位レベルのプロトコルよりも簡単に実装できます。

システム ブラウザをサポートしていないデバイスや、テレビ、ゲーム機、カメラ、プリンタなど、入力機能が制限されたデバイス上で実行されるアプリの場合は、テレビとデバイス用の OAuth 2.0 またはテレビや制限付きの入力デバイスでのログインをご覧ください。

ライブラリとサンプル

このドキュメントで説明する OAuth 2.0 フローの実装に役立つ、次のライブラリとサンプルをおすすめします。

Prerequisites

プロジェクトでAPI を有効にする

Google API を呼び出すすべてのアプリケーションで、これらの API を API Consoleで有効にする必要があります。

プロジェクトで API を有効にするには:

  1. Google API ConsoleのOpen the API Library
  2. If prompted, select a project, or create a new one.
  3. [ライブラリ] ページで、YouTube Data API を探して有効にします。アプリケーションで使用するその他の API を探して、それも有効にします。

承認認証情報を作成する

OAuth 2.0 を使用して Google API にアクセスするアプリケーションには、Google の OAuth 2.0 サーバーにアプリケーションを識別するための認証情報が必要です。次の手順では、プロジェクトの認証情報を作成する方法について説明します。これにより、アプリケーションはその認証情報を使用して、そのプロジェクトで有効にした API にアクセスできます。

  1. Go to the Credentials page.
  2. [認証情報を作成] > [OAuth クライアント ID] をクリックします。
  3. 以下のセクションでは、Google の認可サーバーがサポートするクライアント タイプとリダイレクト方法について説明します。アプリケーションに適切なクライアント タイプを選択し、OAuth クライアントに名前を付け、必要に応じてフォームの他のフィールドを設定します。

カスタム URI スキーム(Android、iOS、UWP)

カスタム URI スキームは、Android アプリ、iOS アプリ、ユニバーサル Windows プラットフォーム(UWP)アプリにおすすめです。

Android
  1. アプリケーションの種類として [Android] を選択します。
  2. OAuth クライアントの名前を入力します。クライアントを識別するために、この名前がプロジェクトの Credentials page に表示されます。
  3. Android アプリのパッケージ名を入力します。この値は、アプリ マニフェスト ファイルの <manifest> 要素の package 属性で定義されています。
  4. アプリの配布の SHA-1 署名証明書のフィンガープリントを入力します。
    • アプリで Google Play アプリ署名を使用している場合は、Google Play Console のアプリ署名ページから SHA-1 フィンガープリントをコピーします。
    • 独自のキーストアと署名鍵を管理する場合は、Java に含まれる keytool ユーティリティを使用して、人が読める形式で証明書情報を出力します。keytool 出力の Certificate fingerprints セクションの SHA1 値をコピーします。詳細については、Android 向け Google API ドキュメントのクライアントの認証をご覧ください。
  5. [作成] をクリックします。
iOS
  1. [iOS] アプリケーション タイプを選択します。
  2. OAuth クライアントの名前を入力します。クライアントを識別するために、この名前がプロジェクトの Credentials page に表示されます。
  3. アプリのバンドル ID を入力します。バンドル ID は、アプリの情報プロパティ リストのリソース ファイル(info.plist)にある CFBundleIdentifier キーの値です。この値は、Xcode プロジェクト エディタの [General] ペインまたは [Signing & Capabilities] ペインに最もよく表示されます。バンドル ID は、Apple の App Store Connect サイトにあるアプリの [App Information] ページの [General Information] セクションにも表示されます。
  4. (省略可)

    Apple の App Store でアプリを公開している場合は、アプリの App Store ID を入力します。ストア ID は、すべての Apple App Store の URL に含まれる数値文字列です。

    1. iOS または iPadOS デバイスで Apple App Store アプリを開きます。
    2. 自分のアプリを探します。
    3. 共有ボタン(四角と上矢印の記号)を選択します。
    4. [リンクをコピー] を選択します。
    5. リンクをテキスト エディタに貼り付けます。App Store ID は URL の最後の部分です。

      例: https://apps.apple.com/app/google/id284815942

  5. (省略可)

    チーム ID を入力します。詳しくは、Apple Developer Account のドキュメントでチーム ID を確認するをご覧ください。

  6. [作成] をクリックします。
UWP
  1. [Universal Windows Platform] アプリケーション タイプを選択します。
  2. OAuth クライアントの名前を入力します。クライアントを識別するために、この名前がプロジェクトの Credentials page に表示されます。
  3. アプリの 12 文字の Microsoft Store ID を入力します。この値は Microsoft Partner Center の [App management] セクションにある [App identity] ページで確認できます。
  4. [作成] をクリックします。

UWP アプリのカスタム URI スキームは 39 文字以内にする必要があります。

ループバック IP アドレス(macOS、Linux、Windows のパソコン)

この URL を使用して認証コードを受信するには、アプリケーションがローカル ウェブサーバーでリッスンしている必要があります。これは、多くのプラットフォームで可能です。ただし、プラットフォームでサポートしている場合は、認可コードを取得するための推奨メカニズムとなります。

認証レスポンスを受信したら、ブラウザを閉じてアプリに戻るように指示する HTML ページを表示し、ユーザビリティを高めることができます。

推奨される使用方法 macOS、Linux、Windows のデスクトップ アプリ(ユニバーサル Windows プラットフォームを除く)
フォームの値 アプリケーションの種類を [デスクトップ アプリ] に設定します。

手動コピーして貼り付け

アクセス スコープを特定する

スコープを使用すると、アプリケーションは必要なリソースへのアクセス権のみをリクエストでき、ユーザーはアプリケーションに付与するアクセス権の量を制御できます。したがって、リクエストするスコープの数とユーザーの同意を取得する可能性の間には、反比例の関係がある可能性があります。

OAuth 2.0 認証の実装を開始する前に、アプリがアクセスする必要があるスコープを特定することをおすすめします。

他の動画を管理する

YouTube Data API v3 では、次のスコープが使用されます。

スコープ
https://www.googleapis.com/auth/youtubeYouTube アカウントの管理
https://www.googleapis.com/auth/youtube.channel-memberships.creator現在アクティブなチャンネル メンバー、メンバーの現在のレベル、いつメンバーになったかをリストで確認する
https://www.googleapis.com/auth/youtube.force-sslYouTube 動画、評価、コメント、字幕の表示、編集、完全削除
https://www.googleapis.com/auth/youtube.readonlyYouTube アカウントの表示
https://www.googleapis.com/auth/youtube.uploadYouTube 動画の管理
https://www.googleapis.com/auth/youtubepartnerYouTube のアセットや関連するコンテンツの表示と管理
https://www.googleapis.com/auth/youtubepartner-channel-auditYouTube パートナーの監査プロセス時に関連する YouTube チャンネルの個人情報の表示

OAuth 2.0 API スコープのドキュメントに、Google API へのアクセスに使用できるすべてのスコープが記載されています。

OAuth 2.0 アクセス トークンの取得

次の手順では、アプリケーションが Google の OAuth 2.0 サーバーとやり取りし、ユーザーに代わって API リクエストを実行することをユーザーの同意を得ています。アプリケーションは、ユーザーの承認が必要な Google API リクエストを実行する前に、ユーザーの同意を得る必要があります。

ステップ 1: コード検証ツールを生成してチャレンジする

Google は、インストール済みのアプリフローをより安全にするために、Proof Key for Code Exchange(PKCE)プロトコルをサポートしています。認証リクエストごとに一意のコード検証ツールが作成され、「code_challenge」という変換された値が認証サーバーに送信されて認証コードが取得されます。

コード検証ツールを作成する

code_verifier は、予約されていない文字 [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "" を使用する高エントロピー暗号のランダム文字列で、長さは 43 文字以下、最大長は 128 文字です。

コードベリファイアには、値を推測するのを実践できないようなエントロピーが必要です。

コード チャレンジを作成する

コード チャレンジを作成する方法は 2 つあります。

コード チャレンジの生成方法
S256(推奨) コードチャレンジは、Base64URL(パディングなし)でエンコードされた、コード検証ツールの SHA256 ハッシュです。
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
プレーン コードによる確認の値は、上で生成したコード検証ツールと同じです。
code_challenge = code_verifier

ステップ 2: Google の OAuth 2.0 サーバーにリクエストを送信する

ユーザーの承認を取得するには、https://accounts.google.com/o/oauth2/v2/auth のリクエストを Google の認可サーバーに送信します。このエンドポイントは、アクティブなセッション検索を処理し、ユーザーを認証してユーザーの同意を取得します。エンドポイントへのアクセスは SSL 経由でのみ可能で、HTTP(非 SSL)接続は拒否されます。

認可サーバーは、インストールされているアプリケーションに対して次のクエリ文字列パラメータをサポートしています。

パラメータ
client_id 必須

アプリケーションのクライアント ID。この値は API Console Credentials pageにあります。

redirect_uri 必須

Google の認可サーバーがアプリにレスポンスを送信する方法を指定します。インストール済みアプリで使用できるリダイレクト オプションはいくつかあります。また、特定のリダイレクト方法を念頭に置いて、認証情報を設定する必要があります。

この値は、クライアントの API Consoleの Credentials pageで構成した OAuth 2.0 クライアントの承認済みリダイレクト URI のいずれかと完全に一致する必要があります。この値が承認済み URI と一致しない場合は、redirect_uri_mismatch エラーが発生します。

次の表に、メソッドごとに適切な redirect_uri パラメータ値を示します。

redirect_uri 個の値
カスタム URI スキーム com.example.app:redirect_uri_path

または

com.googleusercontent.apps.123:redirect_uri_path
  • com.example.app は、制御下にあるドメインの逆表記です。カスタム スキームを有効にするには、ピリオドを含める必要があります。
  • com.googleusercontent.apps.123 は、クライアント ID の逆 DNS 表記です。
  • redirect_uri_path は、/oauth2redirect などのオプションのパス コンポーネントです。パスは 1 つのスラッシュで開始する必要があり、通常の HTTP URL とは異なります。
ループバック IP アドレス http://127.0.0.1:port または http://[::1]:port

関連するループバック IP アドレスをプラットフォームに照会し、ランダムに利用可能なポートで HTTP リスナーを起動します。port は、アプリがリッスンする実際のポート番号に置き換えます。

モバイルアプリのループバック IP アドレス リダイレクト オプションのサポートは 非推奨になりました。

response_type 必須

Google OAuth 2.0 エンドポイントで認証コードを返すかどうかを決定します。

インストール済みのアプリケーションのパラメータ値を code に設定します。

scope 必須

アプリケーションがユーザーに代わってアクセスできるリソースを識別するスコープをスペースで区切ったリスト。これらの値は、Google がユーザーに表示する同意画面を通知するものです。

スコープを使用すると、アプリケーションは必要なリソースへのアクセスのみをリクエストできます。また、ユーザーはアプリケーションに付与するアクセス権の量を制御できます。したがって、リクエストされたスコープの数とユーザーの同意を取得する可能性の間には反比例があります。

YouTube Data API v3 では、次のスコープが使用されます。

スコープ
https://www.googleapis.com/auth/youtubeYouTube アカウントの管理
https://www.googleapis.com/auth/youtube.channel-memberships.creator現在アクティブなチャンネル メンバー、メンバーの現在のレベル、いつメンバーになったかをリストで確認する
https://www.googleapis.com/auth/youtube.force-sslYouTube 動画、評価、コメント、字幕の表示、編集、完全削除
https://www.googleapis.com/auth/youtube.readonlyYouTube アカウントの表示
https://www.googleapis.com/auth/youtube.uploadYouTube 動画の管理
https://www.googleapis.com/auth/youtubepartnerYouTube のアセットや関連するコンテンツの表示と管理
https://www.googleapis.com/auth/youtubepartner-channel-auditYouTube パートナーの監査プロセス時に関連する YouTube チャンネルの個人情報の表示

Google API へのアクセスに使用できるスコープの一覧については、OAuth 2.0 API スコープをご覧ください。

code_challenge 推奨

認可コードの交換中に、サーバー側のチャレンジとして使用されるエンコード済みの code_verifier を指定します。詳しくは、上記のコードチャレンジを作成するをご覧ください。

code_challenge_method 推奨

認証コードの交換中に使用される code_verifier のエンコードに使用されたメソッドを指定します。このパラメータは、上記の code_challenge パラメータで使用する必要があります。code_challenge を含むリクエストに code_challenge_method の値が存在しない場合、デフォルト値は code_challenge_method になります。plainこのパラメータでサポートされる値は、S256 または plain のみです。

state 推奨

アプリケーションが認証リクエストと認可サーバーのレスポンスとの間の状態を維持するために使用する文字列値を指定します。 ユーザーがアプリのアクセス リクエストを承認または拒否した後、サーバーは redirect_uri の URL フラグメント識別子(#)で、name=value ペアとして送信した正確な値を返します。

このパラメータは、アプリ内の適切なリソースにユーザーを誘導する、ノンスを送信する、クロスサイト リクエスト フォージェリを軽減するなど、複数の目的で使用できます。redirect_uri は推測可能なため、state 値を使用すると、受信接続が認証リクエストの結果であるという保証を増やすことができます。ランダムな文字列を生成するか、Cookie や、クライアントの状態をキャプチャする別の値のハッシュをエンコードする場合は、レスポンスを検証することで、リクエストとレスポンスが同じブラウザから送信されるようになります。これにより、クロスサイト リクエスト フォージェリなどの攻撃を防ぐことができます。state トークンを作成して確認する方法の例については、OpenID Connect のドキュメントをご覧ください。

login_hint 省略可

どのユーザーが認証しようとしているかをアプリケーションが認識している場合、このパラメータを使用して Google 認証サーバーにヒントを提供できます。サーバーはヒントを使用して、ログイン フォームにメールアドレスを事前入力するか、適切なマルチログイン セッションを選択することで、ログインフローを簡素化します。

パラメータ値をメールアドレスまたは sub ID に設定します。これは、ユーザーの Google ID と同じです。

認可 URL の例

以下のタブは、各リダイレクト URI オプションの承認 URL の例を示しています。

各 URL は、ユーザーの YouTube アカウントを表示するためのスコープへのアクセスをリクエストします。

URL は、redirect_uri パラメータの値を除いて同じです。また、URL には、必須の response_type パラメータと client_id パラメータに加え、オプションの state パラメータも含まれます。各 URL には、読みやすくするために改行とスペースが含まれています。

カスタム URI スキーム

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=com.example.app%3A/oauth2redirect&
 client_id=client_id

ループバック IP アドレス

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=http%3A//127.0.0.1%3A9004&
 client_id=client_id

ステップ 3: Google がユーザーに同意を求める

このステップでは、ユーザーはリクエストされたリクエストをアプリケーションに付与するかどうかを決定します。この段階で、アプリケーションの名前と、ユーザーの認証情報を使用してアクセスをリクエストする Google API サービス、および付与されるアクセス範囲の概要を示す同意ウィンドウが表示されます。これにより、ユーザーは、アプリケーションからリクエストされた 1 つ以上のスコープへのアクセスを許可すること、またはリクエストを拒否することに同意できます。

このアプリケーションは、アクセス権が付与されたかどうかを示す Google の OAuth 2.0 サーバーからのレスポンスを待機するため、この段階では何もする必要はありません。この応答については、次のステップで説明します。

エラー

Google の OAuth 2.0 認可エンドポイントへのリクエストには、想定される認証と認可のフローではなく、ユーザー向けのエラー メッセージが表示されることがあります。一般的なエラーコードとおすすめの解決方法を以下に示します。

admin_policy_enforced

Google Workspace 管理者のポリシーにより、リクエストされた 1 つ以上のスコープを Google アカウントで承認できません。管理者が OAuth クライアント ID に明示的にアクセス権が付与されるまで、すべてのスコープまたは機密性の高いスコープと制限付きスコープへのアクセスを制限する方法については、Google Workspace 管理者用ヘルプ記事の Google Workspace のデータにアクセスできるサードパーティ製アプリと内部アプリを制御するをご覧ください。

disallowed_useragent

認可エンドポイントは、Google の OAuth 2.0 ポリシーで許可されていない埋め込みユーザー エージェント内に表示されます。

Android

Android デベロッパーが android.webkit.WebView で承認リクエストを開いたときに、このエラー メッセージが表示されることがあります。代わりに Android 向け Google ログインや、OpenID Foundation の AppAuth for Android などの Android ライブラリを使用する必要があります。

このエラーは、Android アプリが埋め込みユーザー エージェントで一般的なウェブリンクを開き、ユーザーがサイトから Google の OAuth 2.0 認可エンドポイントに移動したときに、このエラーが発生することがあります。デベロッパーは、一般的なリンクをオペレーティング システムのデフォルト リンクハンドラで開く必要があります。オペレーティング システムのデフォルト ハンドラは、Android アプリリンク ハンドラとデフォルトのブラウザアプリの両方を含みます。Android カスタムタブ ライブラリもサポートされています。

iOS

iOS や macOS のデベロッパーが WKWebView で承認リクエストを開くと、このエラーが発生することがあります。代わりに iOS 向け Google ログインや、OpenID Foundation の AppAuth for iOS などの iOS ライブラリを使用する必要があります。

このエラーは、iOS または macOS アプリが埋め込みユーザー エージェントで一般的なウェブリンクを開き、ユーザーがサイトから Google の OAuth 2.0 認可エンドポイントに移動したときに、このエラーが発生することがあります。デベロッパーは、一般的なリンクがオペレーティング システムのデフォルト リンクハンドラ(Universal Links ハンドラまたはデフォルトのブラウザアプリの両方を含む)で開かれるようにする必要があります。SFSafariViewController ライブラリもサポートされています。

org_internal

リクエストの OAuth クライアント ID は、特定の Google Cloud 組織の Google アカウントへのアクセスを制限するプロジェクトの一部です。この構成オプションの詳細については、OAuth 同意画面の設定ヘルプ記事のユーザータイプのセクションをご覧ください。

invalid_grant

コード検証ツールとチャレンジを使用している場合、code_callenge パラメータが無効であるか、指定されていません。code_challenge パラメータが正しく設定されていることを確認します。

アクセス トークンを更新するときに、トークンが期限切れになっているか、無効になっている可能性があります。ユーザーを再度認証し、新しいトークンの取得についてユーザーの同意を得ます。このエラーが引き続き表示される場合は、アプリケーションが正しく構成されていることと、リクエスト内で正しいトークンとパラメータを使用していることを確認してください。それ以外の場合は、ユーザー アカウントが削除または無効化されている可能性があります。

redirect_uri_mismatch

承認リクエストで渡された redirect_uri が、OAuth クライアント ID の承認済みのリダイレクト URI と一致しません。 Google API Console Credentials pageで、承認済みのリダイレクト URI を確認します。

渡された redirect_uri は、クライアント タイプに対して無効である可能性があります。

redirect_uri パラメータは、サポートが終了し、サポートされなくなった OAuth 帯域外(OOB)フローを参照する場合があります。統合を更新するには、移行ガイドをご覧ください。

ステップ 4: OAuth 2.0 サーバー レスポンスを処理する

アプリケーションが承認レスポンスを受信する方法は、使用するリダイレクト URI スキームによって異なります。スキームに関係なく、レスポンスには認証コード(code)またはエラー(error)が含まれます。たとえば、error=access_denied はユーザーがリクエストを拒否したことを示します。

ユーザーがアプリケーションにアクセス権を付与した場合は、次の手順で説明するように、認証コードをアクセス トークンおよび更新トークンと交換できます。

ステップ 5: 更新トークンとアクセス トークンの認証コードを交換する

認証コードをアクセス トークンと交換するには、https://oauth2.googleapis.com/token エンドポイントを呼び出して、次のパラメータを設定します。

フィールド
client_id API Console Credentials pageから取得したクライアント ID。
client_secret API Console Credentials pageから取得したクライアント シークレット。
code 最初のリクエストから返された認証コード。
code_verifier ステップ 1 で作成したコード検証ツール
grant_type OAuth 2.0 仕様で定義されているように、このフィールドの値は authorization_code に設定する必要があります。
redirect_uri 特定の client_id の API Console Credentials page にあるプロジェクトのリダイレクト URI の 1 つ。

次のスニペットに、サンプル リクエストを示します。

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
client_secret=your_client_secret&
redirect_uri=http://127.0.0.1:9004&
grant_type=authorization_code

Google は、このリクエストに応答して、有効期間の短いアクセス トークンと更新トークンを含む JSON オブジェクトを返します。

レスポンスには、次のフィールドが含まれます。

フィールド
access_token Google API リクエストを承認するためにアプリケーションから送信されたトークン。
expires_in アクセス トークンの残りの有効期間(秒)。
id_token 注: このプロパティは、リクエストに ID スコープ(openidprofileemail など)が含まれる場合にのみ返されます。この値は、ユーザーに関するデジタル署名された ID 情報を含む JSON Web Token(JWT)です。
refresh_token 新しいアクセス トークンの取得に使用できるトークン。更新トークンは、ユーザーがアクセス権を取り消すまで有効です。 インストール済みのアプリケーションでは、更新トークンが常に返されます。
scope access_token によって付与されるアクセス スコープ。スペース区切りの大文字と小文字が区別される文字列のリストとして表されます。
token_type 返されるトークンのタイプ。現時点では、このフィールドの値は常に Bearer に設定されます。

次のスニペットに、サンプル レスポンスを示します。

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/youtube.force-ssl",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Google API の呼び出し

アプリケーションがアクセス トークンを取得した後、その API で必要なアクセス スコープが付与されている場合は、そのトークンを使用して、特定のユーザー アカウントに代わって Google API を呼び出すことができます。これを行うには、access_token クエリ パラメータまたは Authorization HTTP ヘッダー Bearer 値を指定して、API のリクエストにアクセス トークンを含めます。可能であれば、HTTP ヘッダーの使用をおすすめします。クエリ文字列はサーバーログに表示されることが多いためです。ほとんどの場合、クライアント ライブラリを使用して Google API への呼び出しを設定できます(YouTube Data API を呼び出す場合など)。

YouTube Data API では、レコード レーベルや映画制作会社など、複数の YouTube チャンネルを所有および管理する YouTube コンテンツ所有者のみがサービス アカウントをサポートしています。

すべての Google API を試して、そのスコープを OAuth 2.0 Playground で確認できます。

HTTP GET の例

Authorization: Bearer HTTP ヘッダーを使用して youtube.channels エンドポイント(YouTube Data API)を呼び出すと、次のようになります。独自のアクセス トークンを指定する必要があることに注意してください。

GET /youtube/v3/channels?part=snippet&mine=true HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

次に示すのは、access_token クエリ文字列パラメータを使って認証済みユーザーの同じ API を呼び出す例です。

GET https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true

curl の例

これらのコマンドは curl コマンドライン アプリケーションでテストできます。HTTP ヘッダー オプションを使用した推奨の例を次に示します。

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true

別の方法として、クエリ文字列パラメータ オプションを次のように使用することもできます。

curl https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true

アクセス トークンをリフレッシュする

アクセス トークンは定期的に期限が切れ、関連する API リクエストに対する無効な認証情報になります。トークンに関連付けられたスコープへのオフライン アクセスをリクエストした場合、アクセス トークンの更新許可をユーザーに求めることなく(ユーザーが存在しない場合を含む)、更新できます。

アクセス トークンを更新するため、アプリケーションは HTTPS の POST リクエストを Google の承認サーバー(https://oauth2.googleapis.com/token)に送信します。このリクエストには次のパラメータが含まれます。

フィールド
client_id API Consoleから取得したクライアント ID。
client_secret API Consoleから取得したクライアント シークレット。 (Android、iOS、Chrome アプリケーションとして登録されたクライアントからのリクエストには client_secret は適用されません)。
grant_type OAuth 2.0 仕様で定義されているように、このフィールドの値は refresh_token に設定する必要があります。
refresh_token 認証コード交換から返された更新トークン。

次のスニペットに、サンプル リクエストを示します。

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=your_client_id&
client_secret=your_client_secret&
refresh_token=refresh_token&
grant_type=refresh_token

アプリケーションに付与されたアクセス権をユーザーが取り消していない限り、トークン サーバーは新しいアクセス トークンを含む JSON オブジェクトを返します。次のスニペットは、レスポンスの例を示しています。

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
  "token_type": "Bearer"
}

発行される更新トークンの数には上限があります。1 つのクライアントとユーザーの組み合わせごとに 1 つの上限があり、すべてのクライアントで 1 つの上限があります。更新トークンは長期ストレージに保存し、有効な間は継続して使用する必要があります。アプリケーションが更新トークンの数が多すぎると、これらの制限に達し、古い更新トークンが動作しなくなります。

トークンの取り消し

ユーザーは、アプリケーションに付与されたアクセス権を取り消すことを希望する場合もあります。ユーザーは アカウント設定にアクセスして、アクセス権を取り消すことができます。詳しくは、アカウントにアクセスできるサードパーティのサイトやアプリのアクセス権を削除するをご覧ください。

アプリケーションに付与されているアクセス権をプログラムで取り消すことも可能です。ユーザーがサブスクリプションの登録を解除したり、アプリを削除したり、アプリが必要とする API リソースが大幅に変更したりする場合は、プログラムによる取り消しが重要となります。言い換えると、削除プロセスの一部には、以前アプリケーションに付与された権限が確実に削除されるよう API リクエストが含まれることがあります。

プログラムでトークンを取り消すには、アプリケーションが https://oauth2.googleapis.com/revoke にリクエストを送信し、トークンをパラメータとして含めます。

curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
        https://oauth2.googleapis.com/revoke?token={token}

トークンには、アクセス トークンまたは更新トークンを指定できます。トークンがアクセス トークンであり、対応する更新トークンがある場合、更新トークンも取り消されます。

取り消しが正常に処理されると、レスポンスの HTTP ステータス コードが 200 になります。エラー状態の場合、HTTP ステータス コード 400 がエラーコードとともに返されます。

関連情報

IETF の現在のベスト プラクティスである Native Apps 向けの OAuth 2.0 は、ここに記載されているベスト プラクティスの多くを確立しています。