Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google play services GoogleIdToken.Payload getSubject()是用户使用Google身份验证时的最佳db密钥吗?_Google Play Services_Google Api Java Client - Fatal编程技术网

Google play services GoogleIdToken.Payload getSubject()是用户使用Google身份验证时的最佳db密钥吗?

Google play services GoogleIdToken.Payload getSubject()是用户使用Google身份验证时的最佳db密钥吗?,google-play-services,google-api-java-client,Google Play Services,Google Api Java Client,我们正在测试GoogleAPI客户端库(Java1.17.0-rc),以对我们的应用程序进行OAuth身份验证。因此,我们仅为我们自己的web服务器用户授权Android帐户(我们不会将此用于其他谷歌服务) 总体而言,它运行良好,非常干净的UI流:) 然而,我们需要为每个谷歌授权用户创建一个服务器帐户,我不确定对这些用户来说什么是最好的数据库密钥。我们将使用来自验证的字段,我看到两种选择: getSubject()是JWT主体(用户)。从文档中的评论来看,这似乎是一个模糊的谷歌用户ID。如果是这

我们正在测试GoogleAPI客户端库(Java1.17.0-rc),以对我们的应用程序进行OAuth身份验证。因此,我们仅为我们自己的web服务器用户授权Android帐户(我们不会将此用于其他谷歌服务)

总体而言,它运行良好,非常干净的UI流:)

然而,我们需要为每个谷歌授权用户创建一个服务器帐户,我不确定对这些用户来说什么是最好的数据库密钥。我们将使用来自验证的字段,我看到两种选择:

getSubject()是JWT主体(用户)。从文档中的评论来看,这似乎是一个模糊的谷歌用户ID。如果是这样,这听起来像是我们用谷歌认证创建的用户的最佳密钥,但我还没有找到官方文档来证实这一点。一些问题:

  • 谷歌账户之间是否保证唯一
  • 谷歌账户是不可变的吗
  • 如何礼貌地问:)这是一个“官方”的谷歌用户密钥,可能在未来存在,还是只是这个库的测试版的一部分?我们不想孤立所有服务器帐户
getEmail()也是一种可能性,但:

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

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

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

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

有人能证实吗


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

您的答案现在已经快4年了。在过去几年中,通过
Payload.getSubject()
识别用户的方法是否遇到了一些问题?例如:某些用户的ID是否更改,是否缺少任何用户的某些ID,多个用户是否具有相同的ID,等等。。。?