アカウントのリンクを使用すると、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 ログイン リンクをサポートしている必要があります。
アプリ切り替えは、Android と iOS の両方でサポートされています。
仕組み:
Google アプリは、ユーザーのデバイスにアプリがインストールされているかどうかを確認します。
- アプリが見つかった場合、ユーザーはアプリに「切り替え」られます。アプリは、アカウントを Google にリンクするためのユーザーの同意を取得し、Google サーフェスに「切り替え」ます。
- アプリが見つからない場合や、アプリ切り替えのリンク処理中にエラーが発生した場合は、ユーザーは簡素化された OAuth フローまたはウェブ OAuth フローにリダイレクトされます。
図 2. ユーザーのスマートフォンでのアプリ切り替えによるアカウント リンク
OAuth ベースの簡素化されたリンク(「簡素化」)
OAuth ベースの Google ログインによる簡素化されたリンクでは、OAuth リンクの上層に Google ログインを追加します。これにより、ユーザーは Google サーフェスを離れることなくリンクプロセスを完了できるため、手間と離脱を減らすことができます。OAuth ベースの簡素化されたリンクは、Google ログインと OAuth リンクを組み合わせることで、シームレスなログイン、アカウント作成、アカウント リンクを実現し、優れたユーザー エクスペリエンスを提供します。サービスは、OAuth 2.0 準拠の認可エンドポイントとトークン交換エンドポイントをサポートする必要があります。また、トークン交換エンドポイントは JSON Web Token(JWT)アサーションをサポートし、check
、create
、get
インテントを実装する必要があります。
仕組み:
Google はユーザー アカウントをアサートし、次の情報を渡します。
- データベースにユーザーのアカウントが存在する場合、ユーザーは Google アカウントをサービス上のアカウントに正常にリンクします。
- データベースにユーザーのアカウントが存在しない場合、ユーザーは、Google から提供された情報(メールアドレス、名前、プロフィール写真)を使用して新しいサードパーティ アカウントを作成するか、ログインして別のメールアドレスでリンクすることができます(この場合、ウェブ OAuth 経由でサービスにログインする必要があります)。
図 3. 簡素化されたリンクを使用したユーザーのスマートフォンでのアカウント リンク
どのフローを使用すればよいですか。
ユーザーが快適にリンクできるように、すべてのフローを実装することをおすすめします。簡素化されたフローやアプリ切り替えフローでは、ユーザーが非常に少ない手順でリンクプロセスを完了できるため、リンクの負担を軽減できます。ウェブ OAuth リンクは最も手間がかからず、最初に行うのに適しています。その後、他のリンクフローを追加できます。
トークンの操作
Google アカウントのリンクは、業界標準の OAuth 2.0 に基づいています。
アカウント所有者のアカウントのリンクとデータの共有に対する同意を得たうえで、個々の Google アカウントに対して Google へのアクセス トークンを発行します。
令牌类型
OAuth 2.0 使用称为令牌的字符串在用户代理、客户端应用和 OAuth 2.0 服务器之间进行通信。
在账号关联期间,您可以使用三种类型的 OAuth 2.0 令牌:
授权代码。一种短期有效的令牌,可用于交换访问令牌和刷新令牌。出于安全考虑,Google 会调用您的授权端点以获取一次性或非常短效的代码。
访问令牌。授予持有者对资源的访问权限的令牌。为限制因丢失此令牌而导致的泄露风险,此令牌的有效期有限,通常会在大约一小时后过期。
刷新令牌。一个长期有效的令牌,在访问令牌到期时可以交换为新的访问令牌。如果您的服务与 Google 集成,则此令牌由 Google 专门存储和使用。Google 会调用您的令牌交换端点,以便将刷新令牌换成访问令牌,后者会用于访问用户数据。
令牌处理
在使用令牌时,分片环境和客户端-服务器交换中的竞态条件可能会导致复杂的时间安排和错误处理场景。例如:
- 您收到新的访问令牌请求,并发出新的访问令牌。同时,您会收到使用上一个未过期的访问令牌访问服务资源的请求。
- Google 尚未收到(或从未收到)您的刷新令牌回复。与此同时,之前有效的刷新令牌会在 Google 发出的请求中使用。
由于集群中运行的异步服务、网络行为或其他原因,请求和响应可能会以任何顺序到达,也可能根本不会到达。
我们无法保证您和 Google 的令牌处理系统内部以及它们之间的共享状态是立即且完全一致的。在短时间内,多个有效、未过期的令牌可以在系统内部或不同系统之间共存。为了尽可能减少对用户的负面影响,我们建议您执行以下操作:
- 接受未过期的访问令牌,即使已发出较新的令牌也是如此。
- 使用刷新令牌轮替的替代方案。
- 支持多个同时有效的访问令牌和刷新令牌。出于安全考虑,您应限制令牌数量和令牌生命周期。
维护和中断处理
在维护或意外停机期间,Google 可能无法调用您的授权或令牌交换端点来获取访问令牌和刷新令牌。
您的端点应返回 503
错误代码和空正文。在这种情况下,Google 会在有限的时间内重试失败的令牌交换请求。只要 Google 稍后能够获取刷新令牌和访问令牌,用户就不会看到失败的请求。
如果由用户发起,访问令牌请求失败会导致可见错误。如果使用隐式 OAuth 2.0 流程,用户将需要重试关联失败。
建议
您可以通过多种方法最大限度地降低维护影响。请考虑以下可选方案:
维护现有服务,并将有限数量的请求路由到新更新的服务。请仅在确认预期功能后迁移所有请求。
减少维护期间令牌请求的数量:
将维护期限制为短于访问令牌有效期。
暂时延长访问令牌生命周期:
- 将令牌生命周期延长到超过维护期。
- 等待访问令牌生命周期的两倍时间,以便用户将短时有效的令牌换成时长更长的令牌。
- 进入维护模式。
- 使用
503
错误代码和空正文响应令牌请求。 - 退出维护。
- 将令牌生命周期缩短为正常值。
Google への登録
Google では、OAuth 2.0 の設定の詳細と、アカウント リンクを有効にするための認証情報を共有する必要があります。詳しくは、登録をご覧ください。