oAuth 2.0范围来自Google帐户的用户ID

时间:2014-02-26 06:14:01

标签: android oauth-2.0

我想使用oAuth检索用户的ID,最好只检索他们的ID,而不是他们的电子邮件地址,姓名或任何其他信息。

在Android中,我知道如何使用Google Play API获取令牌,并且可以显示用户授予应用权限以访问所请求数据的对话框。我通常使用AccountManager打开对话框,允许用户选择用于授权应用程序的帐户的电子邮件地址。从这个意义上说,我已经可以访问他们的电子邮件地址,虽然我并不需要它。我真正想要的是与该电子邮件地址关联的Google帐户的ID。我也不想使用Google+,因为这需要访问过多的私人信息。

我发现最接近的范围是:

https://www.googleapis.com/auth/userinfo.email

但是,由于我在从AccountManager中选择电子邮件地址时已经可以访问他们的电子邮件地址,因此要求用户允许其电子邮件地址似乎没有意义。

我是否可以调用范围来检索用户的帐户ID?

修改 显然我不是唯一一个对此感到生气的人: http://www.club4850.com/?p=46970

这就是像WhatsApp这样的公司成功的原因。它们不需要注册或访问有关用户的任何信息。谷歌的登录显示了所请求的权限“知道你在Google上的身份” - 失去大量用户的好方法。

1 个答案:

答案 0 :(得分:1)

做更多的研究,有一个解决方案。但是,这确实需要允许用户泄露他们的电子邮件地址。该解决方案称为跨客户端身份:

https://developers.google.com/accounts/docs/CrossClientAuth Verifying Back-End Calls from Android Apps

基本上它的工作原理如下:

  1. 在您的应用程序中,弹出AccountManager对话框,向用户显示其设备上已注册的电子邮件地址列表。注意:当用户将电子邮件添加到他们的设备时,这些地址已经通过Google确认,因此用户无法输入任何电子邮件地址。他们只能从已使用该设备进行设置并经过Google验证的用户中进行选择。
  2. 然后使用范围调用GoogleAuthUtil.getToken audience:server:client_id:xxx其中xxx是您的客户端ID 硬编码到您的应用中,从Google API中检索 该应用程序的控制台。
  3. 以JSON Web令牌(JWT)的格式返回令牌,然后您可以使用JWT库(在Web上提供)将其发送到服务器。此时,您拥有用户ID和他们的电子邮件地址。您应该通过将令牌发送给Google来确认令牌,并检查令牌中的客户ID是否与您在Google API控制台项目中的客户ID相匹配。
  4. 我已经测试了这个并且它有效。无需在设备上存储密码,也无需请求用户关闭的任何奇怪权限。但是,用户必须忍受泄露他们的电子邮件地址,但大多数人通常会遇到较少的问题。但是,您可以告诉应用程序中的用户,如果有助于获得更多信任,则不会存储他们的电子邮件地址或其他信息。

    这里还有一个在线工具,可以解码您在开发过程中可以使用的JWT令牌,以快速查看令牌包含的数据:

    Decode JWT token