google-play-services - GoogleIdToken.Payload getSubject() 是用户使用 Google 身份验证时的最佳数据库 key 吗?

标签 google-play-services google-api-java-client

我们正在测试 Google API 客户端库 (Java 1.17.0-rc),以对我们的 Android app <> GAE server communication 进行 OAuth 身份验证。 。因此,我们仅向我们自己的网络服务器受众授权 Android 帐户(我们不会将其用于其他 Google 服务)。

总的来说,它运行良好,非常干净的 UI 流程:)

但是,我们需要为每个 Google 授权用户创建一个服务器帐户,而且我不确定最适合这些用户的数据库 key 是什么。我们将使用已验证的 GoogleIdToken.Payload 中的字段,我看到两个选择:

getSubject() 是 JWT 主体(用户)。从文档中的评论来看,这听起来像是一个混淆的 Google 用户 ID。如果是这样,这听起来像是我们使用 Google 身份验证创建的用户的最佳 key ,但我还没有找到官方文档来确认这一点。一些问题:

  • 能否保证 Google 帐户之间的唯一性?
  • 对于 Google 帐户来说它是不可变的吗?
  • 如何礼貌地提出这个问题 :) 这是 future 可能存在的用户“官方”Google key ,还是只是该库测试版的一部分?我们不想孤立我们所有的服务器帐户!

getEmail() 也是一种可能性,但是:

  • 它总是存在吗?在我们的测试中它总是被设置,但文档说“返回用户的电子邮件地址,如果没有请求则返回 null”
  • 对于 Google 帐户来说它是不可变且唯一的吗?例如。用户帐户可以更改其电子邮件吗?

顺便说一句,请注意其他使用这些 API 的人,我们在测试中发现您不能假设 Account.name 与 Payload.getEmail() 匹配,例如一些德国 gmail 用户有不同的域,大小写可能不同等。

最佳答案

我通过实验得到了一个初步的答案。我向我们的应用程序添加了一个测试,现在它在我们的服务器上创建了几千个用户帐户。 GoogleIdToken Payload getSubject() 看起来与 Google+ 所用的用户 ID 相同,因为 A) 格式相同,B) 对于也登录到 g+ 的用户来说,它是相同的 ID。

所以我相信 getSubject() 或 getId() 在早期版本中被称为 getId() ,是一个 Google 通用用户 ID,用于 g+ 帐户,但也仅适用于任何已设置 Google 帐户的人,甚至如果他们没有明确完成 g+ 设置流程。

谁能证实这一点?

到目前为止,此用户帐户创建流程唯一不起作用的情况是 AccountManager getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE) 返回零个帐户的中国大多数设备。

关于google-play-services - GoogleIdToken.Payload getSubject() 是用户使用 Google 身份验证时的最佳数据库 key 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203954/

相关文章:

android - 在后台服务中使用 Google Play Services LocationClient

android - 谷歌地图区分用户移动和动画

android - 如何区分 Google Fit Api 中手动添加的步数和传感器记录的步数

java - google api的maven用法

google-api - 调用 users().list().execute() 时,Google Directory API 返回 Not Authorized

android - Vision BarcodeDetector 不读取数据矩阵条码

android - 使用 LocationSettingsRequest 请求高精度位置不更新位置设置

java - GoogleJsonResponseException : 404 Not Found during getting user list of enterprise

java - Android 应用程序中的 Google 翻译 API

java - Google 钱包在线 API