oauth-2.0 - Google OAuth 2.0 中用户 ID 唯一性的范围
问题描述
我们正在使用 Google OAuth 2.0 将用户登录添加到我们的移动应用程序(复数)。每个应用程序都有自己的客户端 ID,该客户端 ID 将在单独的 Google 云项目中定义,因为我们希望每个应用程序都有自己的登录同意屏幕,其中包含自定义磁贴、徽标等。但是,我们将所有应用程序的用户 ID 存储在一个单个数据库表。
考虑以下场景:2 个不同的用户 - Alice 和 Bob,其中 Alice 登录,MyApp1
Bob 登录MyApp2
(每个应用程序在同一个 GCP 帐户下的不同 Google 项目中定义)。Alice 和 Bob 是否有可能获得相同的用户 ID X
?或者,Alice 是否有可能在登录时获得分配的用户 ID ,并X
在登录时MyApp1
获得用户 ID ?Y
MyApp2
假设 Google 完全遵守 OpenID Connect 标准。OpenID 标准说:
子要求。主题标识符。最终用户在发行者中的本地唯一且永不重新分配的标识符,旨在由客户端使用...
“本地唯一且永不重新分配”是什么意思?
TIA
解决方案
Alice 和 Bob 将从 Google Auth 获得不同的用户 ID,它们类似于 GUID,并且您的 API 将在主题声明中接收它们。即使用户更改了他们的姓名或电子邮件,此值也保持不变。
sub 声明在所有应用程序中都是相同的,尽管在某些高级场景中可以使用成对标识符,其中每个应用程序的 sub 不同。不过,这通常最好避免。
许多公司做什么
在大多数现实世界的系统中,您需要在登录后在您自己的数据中查找用户,以访问用户的应用程序数据。您需要将子值映射到数据库行。有关如何处理此问题的一些想法,请参阅我关于用户数据管理的帖子。
推荐阅读
- discord.py - 如何让我的机器人回复用户发送的内容?
- swift - 通过关系列出 CoreData 对象
- iis - Blazor 相对 url
- flutter - Flutter 网站初始加载需要很长时间
- android - Android Studio 4 参数提示并不总是显示
- html - 如何在引导程序 4 中居中对齐分页?
- javascript - 如何将键/值对从 for 循环推送到现有的对象数组
- powershell - 不能修改对象的属性
- r - 如何请求特定版本的 R 包在 conda repo 上可用?
- swift - 表视图单元格中带有 UIImageView 的 UITapGestureRecognizer 不工作 Swift