首页 > 解决方案 > Google OAuth 2.0 中用户 ID 唯一性的范围

问题描述

我们正在使用 Google OAuth 2.0 将用户登录添加到我们的移动应用程序(复数)。每个应用程序都有自己的客户端 ID,该客户端 ID 将在单独的 Google 云项目中定义,因为我们希望每个应用程序都有自己的登录同意屏幕,其中包含自定义磁贴、徽标等。但是,我们将所有应用程序的用户 ID 存储在一个单个数据库表。

考虑以下场景:2 个不同的用户 - Alice 和 Bob,其中 Alice 登录,MyApp1Bob 登录MyApp2(每个应用程序在同一个 GCP 帐户下的不同 Google 项目中定义)。Alice 和 Bob 是否有可能获得相同的用户 ID X?或者,Alice 是否有可能在登录时获得分配的用户 ID ,并X在登录时MyApp1获得用户 ID ?YMyApp2

假设 Google 完全遵守 OpenID Connect 标准。OpenID 标准说:

子要求。主题标识符。最终用户在发行者中的本地唯一且永不重新分配的标识符,旨在由客户端使用...

“本地唯一且永不重新分配”是什么意思?

TIA

标签: oauth-2.0openid-connectgoogle-oauth

解决方案


Alice 和 Bob 将从 Google Auth 获得不同的用户 ID,它们类似于 GUID,并且您的 API 将在主题声明中接收它们。即使用户更改了他们的姓名或电子邮件,此值也保持不变。

sub 声明在所有应用程序中都是相同的,尽管在某些高级场景中可以使用成对标识符,其中每个应用程序的 sub 不同。不过,这通常最好避免。

许多公司做什么

在大多数现实世界的系统中,您需要在登录后在您自己的数据中查找用户,以访问用户的应用程序数据。您需要将子值映射到数据库行。有关如何处理此问题的一些想法,请参阅我关于用户数据管理的帖子。


推荐阅读