概要

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

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

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

ユースケース

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

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

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

  • Google Home アプリと Google アシスタントを使用して、Google スマートホームのコネクテッド デバイスを管理、操作する(「OK Google、照明をつけて」)。

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

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

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

サポートされている機能

これらの機能は Google アカウントのリンクでサポートされています。

  • OAuth Linking 暗黙的フローを使用して、データをすばやく共有します。

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

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

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

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

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

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

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

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

OAuth リンク(「ウェブ OAuth」)

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

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

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

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

リンク用にユーザーをアプリに送信する OAuth フロー。

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

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

仕組み:

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

  • アプリが見つかると、ユーザーはアプリに「切り替わり」ます。アプリは、アカウントを Google にリンクするための同意をユーザーから取得し、Google サーフェスに「切り替わり」ます。
  • アプリが見つからない場合や、アプリ切り替えのアカウントへの関連付けプロセス中にエラーが発生した場合は、ユーザーは Streamlined OAuth フローまたは Web OAuth フローにリダイレクトされます。

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

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

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

仕組み:

Google はユーザー アカウントをアサートし、この情報をデベロッパーに渡します。

  • データベースにユーザーのアカウントが存在する場合、ユーザーは Google アカウントをサービスのアカウントに正常にリンクします。
  • データベースにユーザーのアカウントが存在しない場合、ユーザーは Google が提供するアサーション情報(メールアドレス、名前、プロフィール写真)を使用して新しいサードパーティ アカウントを作成するか、別のメールアドレスでログインしてリンクするかを選択できます(この場合、Web 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 で登録する

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