2

我们正在测试 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 用户有不同的域,大小写可能不同等。

4

1 回答 1

2

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

因此,我相信 getSubject() 或在早期版本中调用的 getId() 是用于 g+ 帐户的 Google 通用用户 ID,但也仅适用于已设置 Google 帐户的任何人,即使他们有没有明确通过 g+ 设置流程。

谁能证实这一点?

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

于 2013-10-08T13:34:46.513 回答