概要

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

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

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

ユースケース

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

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

  • Google TV を使用して、動画や映画を再生する。

  • Google Home アプリと Google アシスタントを使用して、Google スマートホームの接続済みデバイスを管理し、操作できます。「OK Google, 電気をつけて」

  • 会話型アクションを使用して、ユーザーに合わせてカスタマイズされた Google アシスタントのエクスペリエンスと機能を作成する。「OK Google, Starbucks の通常の注文をして」。

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

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

サポートされる機能

以下の機能は Google アカウントのリンクに対応しています。

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

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

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

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

  • 必要なデータのみを共有するようにカスタム スコープを定義してユーザーのプライバシーを向上させる。ユーザーのデータの使用方法を明確に定義することでユーザーの信頼を高める。

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

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

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

リンク処理中にアカウント所有者がアカウントのリンクとデータの共有に同意した後、個々の Google アカウントのアクセス トークンを発行します。

OAuth リンク設定 ('ウェブ 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 フローにリダイレクトされます。

図 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 アカウントのアクセス トークンを発行します。

代币类型

OAuth 2.0使用称为令牌的字符串在用户代理,客户端应用程序和OAuth 2.0服务器之间进行通信。

帐户链接期间可以使用三种OAuth 2.0令牌:

  • 授权码。可以交换访问权限的短期令牌和刷新令牌。为了安全起见,Google会调用您的授权端点来获取一次性使用或寿命很短的代码。

  • 访问令牌。授予承载者对资源的访问权的令牌。为了限制可能因丢失此令牌而导致的风险敞口,它的使用寿命有限,通常会在一个小时左右后过期。

  • 刷新令牌。访问令牌到期时可以交换新的访问令牌的长期令牌。当您的服务与Google集成时,此令牌将由Google专门存储和使用。 Google调用您的令牌交换端点,以将刷新令牌交换为访问令牌,这些访问令牌又用于访问用户数据。

代币处理

在使用令牌时,群集环境和客户端-服务器交换中的竞争条件可能导致复杂的时序和错误处理方案。例如:

  • 您收到一个新的访问令牌的请求,并发出一个新的访问令牌。同时,您会收到使用前一个未过期的访问令牌访问服务资源的请求。
  • 您的刷新令牌回复尚未被Google收到(或从未收到)。同时,先前有效的刷新令牌用于Google的请求中。

由于在群集中运行的异步服务,网络行为或其他方式,请求和答复可以以任何顺序到达,或者根本无法到达。

无法保证您和Google的令牌处理系统之间以及之间的即时且完全一致的共享状态。多个有效的未过期令牌可以在短时间内在系统内或系统之间共存。为了最大程度地减少对用户的负面影响,建议您执行以下操作:

  • 即使发布了更新的令牌,也要接受未过期的访问令牌。
  • 使用替代方法来刷新令牌轮换
  • 支持多个并发有效的访问和刷新令牌。为了安全起见,应限制令牌的数量和令牌的生存期。
维护和停运处理

在维护或计划外中断期间,Google可能无法调用您的授权或令牌交换端点来获取访问权限并刷新令牌。

您的端点应以503错误代码和空主体作为响应。在这种情况下,Google将在有限的时间内重试失败的令牌交换请求。如果Google以后能够获取刷新和访问令牌,则失败的请求对用户不可见。

如果用户发起访问请求失败的请求,则会导致可见错误。如果使用隐式OAuth 2.0流程,则要求用户重试链接失败。

推荐建议

有许多解决方案可以最大程度地减少维护影响。要考虑的一些选项:

  • 维护您现有的服务,并将有限数量的请求路由到您的新更新的服务。仅在确认预期功能后才能迁移所有请求。

  • 在维护期间减少令牌请求的数量:

    • 将维护周期限制为少于访问令牌生存期。

    • 临时增加访问令牌的生存期:

      1. 将令牌寿命增加到大于维护期限。
      2. 等待两次访问令牌生存期,从而使用户可以将短期令牌替换为较长令牌。
      3. 输入维护。
      4. 使用503错误代码和空主体来响应令牌请求。
      5. 退出维护。
      6. 将令牌生存期降低到正常水平。

Google への登録

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