概要

アカウントのリンクを使用すると、Google アカウント所有者は、迅速かつシームレスに、安全にお客様のサービスに接続できます。Google アカウント リンクを実装して、プラットフォームからのユーザーのデータを Google のアプリやサービスと共有することもできます。

安全な OAuth 2.0 プロトコルを使用すると、ユーザーの Google アカウントをプラットフォーム上のアカウントに安全にリンクし、Google のアプリケーションとデバイスにサービスへのアクセス権を付与できます。

ユーザーは、Google アカウントのリンクを使用して、アカウントをリンクしたり、リンクを解除したり、必要に応じてプラットフォームで新しいアカウントを作成したりできます。

ユースケース

Google アカウントのリンクを実装する理由には、次のようなものがあります。

  • プラットフォームのユーザーデータを Google のアプリやサービスと共有する。

  • Google TV を使用して動画や映画のコンテンツを再生する。

  • Google Home アプリや Google アシスタント(「OK Google、照明をオンにして」)を使用して、Google スマートホームに接続されているデバイスを管理、操作できます。

  • 会話型アクションを使用して、ユーザーがカスタマイズした Google アシスタントのエクスペリエンスと機能を作成します。「OK Google, Starbucks でいつものコーヒーを注文して」など。

  • Google アカウントを特典パートナー アカウントにリンクした後、YouTube で対象のライブ配信を視聴して特典を獲得できるようにします。

  • Google アカウントのプロフィールから同意に基づいて共有されたデータを使用して、登録時に新しいアカウントに事前入力します。

サポートされている機能

Google アカウントのリンクでは、次の機能がサポートされます。

  • OAuth リンク暗黙的フローを使用して、データをすばやく簡単に共有できます。

  • OAuth リンク認証コードフローを使用してセキュリティを強化します。

  • 既存のユーザーをログインさせるか、Google で確認済みの新しいユーザーをプラットフォームに登録し、同意を得て、簡素化されたリンクでデータを安全に共有します。

  • アプリ切り替えで手間を軽減します。信頼できる Google アプリから、1 回タップするだけで、確認済みの Android アプリまたは iOS アプリが安全に開き、1 回タップするだけでユーザーの同意が得られ、アカウントがリンクされます。

  • 必要なデータのみを共有するカスタム スコープを定義してユーザーのプライバシーを保護し、データの使用方法を明確に定義してユーザーの信頼を高めます。

  • プラットフォームでホストされているデータとサービスへのアクセス権は、アカウントのリンクを解除することで取り消すことができます。オプションのトークン取り消しエンドポイントを実装すると、Google が開始したイベントとの同期を維持できます。また、クロスアカウント保護(RISC)を使用すると、プラットフォームで発生したリンク解除イベントを Google に通知できます。

アカウントのリンクフロー

Google アカウントのリンクには 3 つのフローがあり、いずれも OAuth ベースです。これらのフローは、OAuth 2.0 準拠の承認とトークン交換エンドポイントを管理または制御する必要があります。

リンク プロセスでは、アカウント所有者のアカウントのリンクとデータの共有に対する同意を得た後、個々の Google アカウントの Google へのアクセス トークンを発行します。

OAuth のリンク(「Web OAuth」)

これは、ユーザーをウェブサイトに誘導してリンクを促す基本的な OAuth フローです。ユーザーはウェブサイトにリダイレクトされ、アカウントにログインできます。ログインすると、ユーザーはサービス上のデータを Google と共有することに同意します。この時点で、ユーザーの Google アカウントとお客様のサービスがリンクされます。

OAuth リンクは、認証コードとインプリシット OAuth フローをサポートしています。サービスは、インプリシット フロー用に OAuth 2.0 準拠の認可エンドポイントをホストする必要があります。また、認可コードフローを使用する場合は、認可エンドポイントとトークン交換エンドポイントの両方を公開する必要があります。

図 1. ユーザーのスマートフォンでのウェブ OAuth によるアカウント リンク

OAuth ベースのアプリ切り替えリンク(「アプリ切り替え」)

ユーザーをアプリに送信してリンクを行う OAuth フロー。

OAuth ベースのアプリ切り替えリンクは、検証済みの Android または iOS モバイルアプリと Google のプラットフォーム間を移動する際に、提案されたデータアクセスの変更を確認し、プラットフォーム上のアカウントと Google アカウントをリンクすることに同意をユーザーに与えます。アプリ切り替えを有効にするには、サービスが認可コードフローを介した OAuth リンクまたは OAuth ベースの Google ログイン リンクをサポートしている必要があります。

アプリ切り替えは、AndroidiOS の両方でサポートされています。

仕組み:

Google アプリは、ユーザーのデバイスにアプリがインストールされているかどうかを確認します。

  • アプリが見つかった場合、ユーザーはアプリに「切り替え」られます。アプリは、アカウントを Google にリンクするためのユーザーの同意を取得し、Google サーフェスに「切り替え」ます。
  • アプリが見つからない場合や、アプリ切り替えのリンク処理中にエラーが発生した場合は、ユーザーは簡素化された OAuth フローまたはウェブ OAuth フローにリダイレクトされます。

図 2. ユーザーのスマートフォンでのアプリ切り替えによるアカウント リンク

OAuth ベースの簡素化されたリンク(「簡素化」)

OAuth ベースの Google ログインによる簡素化されたリンクでは、OAuth リンクの上層に Google ログインを追加します。これにより、ユーザーは Google サーフェスを離れることなくリンクプロセスを完了できるため、手間と離脱を減らすことができます。OAuth ベースの簡素化されたリンクは、Google ログインと OAuth リンクを組み合わせることで、シームレスなログイン、アカウント作成、アカウント リンクを実現し、優れたユーザー エクスペリエンスを提供します。サービスは、OAuth 2.0 準拠の認可エンドポイントとトークン交換エンドポイントをサポートする必要があります。また、トークン交換エンドポイントは JSON Web Token(JWT)アサーションをサポートし、checkcreateget インテントを実装する必要があります。

仕組み:

Google はユーザー アカウントをアサートし、次の情報を渡します。

  • データベースにユーザーのアカウントが存在する場合、ユーザーは Google アカウントをサービス上のアカウントに正常にリンクします。
  • データベースにユーザーのアカウントが存在しない場合、ユーザーは、Google から提供された情報(メールアドレス、名前、プロフィール写真)を使用して新しいサードパーティ アカウントを作成するか、ログインして別のメールアドレスでリンクすることができます(この場合、ウェブ OAuth 経由でサービスにログインする必要があります)。

図 3. 簡素化されたリンクを使用したユーザーのスマートフォンでのアカウント リンク

どのフローを使用すればよいですか。

ユーザーが快適にリンクできるように、すべてのフローを実装することをおすすめします。簡素化されたフローやアプリ切り替えフローでは、ユーザーが非常に少ない手順でリンクプロセスを完了できるため、リンクの負担を軽減できます。ウェブ OAuth リンクは最も手間がかからず、最初に行うのに適しています。その後、他のリンクフローを追加できます。

トークンの操作

Google アカウントのリンクは、業界標準の OAuth 2.0 に基づいています。

アカウント所有者のアカウントのリンクとデータの共有に対する同意を得たうえで、個々の Google アカウントに対して Google へのアクセス トークンを発行します。

トークンの種類

OAuth 2.0 では、トークンと呼ばれる文字列を使用して、ユーザー エージェント、クライアント アプリケーション、OAuth 2.0 サーバー間で通信します。

アカウントのリンク時には、次の 3 種類の OAuth 2.0 トークンを使用できます。

  • 認証コード。アクセス トークンと更新トークンと交換できる有効期間の短いトークン。セキュリティ上の理由から、Google は認可エンドポイントを呼び出して、1 回限りのコードまたは非常に有効期間の短いコードを取得します。

  • アクセス トークン。リソースに対するアクセス権を署名なしに付与するトークン。このトークンの紛失によるリスクを軽減するため、トークンの有効期間は制限されています。通常は 1 時間ほどで期限切れになります。

  • 更新トークン。アクセス トークンの有効期限が切れたときに新しいアクセス トークンと交換できる長期トークン。サービスが Google と統合されると、このトークンは Google によってのみ保存され、使用されます。Google はトークン交換エンドポイントを呼び出して、更新トークンをアクセス トークンと交換します。このアクセス トークンは、ユーザーデータへのアクセスに使用されます。

トークンの処理

クラスタ環境とクライアント / サーバー エクスチェンジでの競合状態により、トークンを使用する際のタイミングとエラー処理のシナリオが複雑になる可能性があります。例:

  • 新しいアクセス トークンのリクエストを受信し、新しいアクセス トークンを発行します。同時に、以前の有効期限切れでないアクセス トークンを使用して、サービスのリソースへのアクセス リクエストが届きます。
  • リフレッシュ トークンの返信が Google にまだ受信されていない(または受信されない)。一方、以前に有効だった更新トークンは、Google からのリクエストで使用されます。

リクエストとレスポンスは任意の順序で到着する可能性があります。また、クラスタ内で実行される非同期サービス、ネットワーク動作などの原因で、まったく到着しないこともあります。

お客様のシステムと Google のトークン処理システムの間で、即時かつ完全に一貫した共有状態を保証することはできません。有効で期限切れでない複数のトークンは、短時間にシステム内またはシステム間で共存できます。ユーザーへの悪影響を最小限に抑えるには、次の対応をおすすめします。

  • 新しいトークンが発行された後でも、有効期限が切れていないアクセス トークンを受け入れます。
  • 更新トークンのローテーションの代替手段を使用する。
  • 複数のアクセス トークンと更新トークンを同時に有効にできます。セキュリティ上の理由から、トークンの数とトークンの有効期限を制限する必要があります。
メンテナンスと停止の処理

メンテナンス中や予期せぬ機能停止時に、Google はユーザーの認可エンドポイントまたはトークン交換エンドポイントを呼び出して、アクセス トークンと更新トークンを取得できないことがあります。

エンドポイントは、503 エラーコードと空の本文を返す必要があります。この場合、Google は失敗したトークン交換リクエストを一定期間再試行します。Google が後で更新トークンとアクセス トークンを取得できる場合、失敗したリクエストはユーザーには表示されません。

アクセス トークンのリクエストが失敗すると、ユーザーが開始した場合はエラーが表示されます。暗黙的 OAuth 2.0 フローが使用されている場合、リンクに失敗した場合は、ユーザーが再試行する必要があります。

推奨事項

メンテナンスの影響は、さまざまな方法で最小限に抑えることができます。次のような選択肢があります。

  • 既存のサービスを維持し、制限された数のリクエストを新しく更新されたサービスに転送します。すべてのリクエストを移行するのは、想定される機能を確認した後のみです。

  • メンテナンス期間中のトークン リクエスト数を減らす:

    • メンテナンス期間をアクセス トークンの有効期間より短くします。

    • アクセス トークンの有効期間を一時的に延長します。

      1. トークンの有効期間をメンテナンス期間よりも長くします。
      2. アクセス トークンの有効期間の 2 倍の間隔を空けて、ユーザーが有効期間の短いトークンを長いトークンと交換できるようにします。
      3. メンテナンスに入ります。
      4. トークン リクエストに 503 エラーコードと空の本文で応答します。
      5. メンテナンスから終了します。
      6. トークンの存続期間を通常に戻します。

Google への登録

Google では、OAuth 2.0 の設定の詳細と、アカウント リンクを有効にするための認証情報を共有する必要があります。詳しくは、登録をご覧ください。