我们正在测试 Google API 客户端库 (Java 1.17.0-rc) 以对我们的Android 应用 <> GAE 服务器通信进行 OAuth 身份验证。因此,我们仅为我们自己的网络服务器受众授权 Android 帐户(我们不将其用于其他 Google 服务)。
总的来说,它运作良好,非常干净的 UI 流程 :)
但是,我们需要为每个 Google 授权用户创建一个服务器帐户,我不确定这些用户的最佳数据库密钥是什么。我们将使用经过验证的GoogleIdToken.Payload中的一个字段,我看到两个选择:
getSubject()是 JWT 主体(用户)。从文档中的评论看来,这是一个混淆的 Google 用户 ID。如果是这样,这听起来像是我们使用 Google 身份验证创建的用户的最佳密钥,但我还没有找到官方文档来确认这一点。一些问题:
- 是否保证在 Google 帐户之间是唯一的?
- 谷歌帐户是不可变的吗?
- 如何礼貌地问这个问题:) 这是未来可能存在的用户的“官方”谷歌密钥,还是这个库测试版的一部分?我们不想孤立我们所有的服务器帐户!
getEmail()也是一种可能性,但是:
- 它总是存在吗?在我们的测试中,它总是被设置,但文档说“返回用户的电子邮件地址,如果没有请求,则返回 null”
- 对于谷歌帐户来说,它是不可变的和唯一的吗?例如,用户帐户可以更改他们的电子邮件吗?
顺便说一句,只是给使用这些 API 的其他人的说明,我们在测试中发现您不能假设 Account.name 与 Payload.getEmail() 匹配,例如,一些德国 gmail 用户有不同的域,大小写可能不同等。