2014-02-26 53 views
0

我想使用oAuth来检索用户的ID,并且最好只是他们的ID而不是他们的电子邮件地址,姓名或任何其他信息。oAuth 2.0适用于Google帐户的用户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的登录功能会显示请求的权限“了解您在Google上的身份” - 这是丢失大量用户的好方法。

+0

你是什么意思,以及如何是不同的从他们的电子邮件地址 – ianhanniballake

+0

帐户ID通常是一个数字,尽管它可能是一些长字符串。它通常不会透露给应用程序。该应用程序将首先检索一个令牌,然后将其发送到我的服务器,然后使用它来检索存储的用户ID。 – AndroidDev

回答

1

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

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

基本上它的工作原理是这样的:

  1. 在您的应用程序,你弹出的AccountManager对话框,呈现的登记列表中的用户设备上的电子邮件地址。注意:当用户将电子邮件添加到他们的设备时,这些地址已经通过Google进行了确认,因此无法让任何人输入任何电子邮件地址。他们只能从已通过设备设置并通过Google验证的用户中进行选择。
  2. 你再调用GoogleAuthUtil.getToken与范围 观众:服务器:CLIENT_ID:XXX其中xxx为客户端ID,你 硬编码到您的应用程序,这是从谷歌API 控制台应用程序检索。
  3. 令牌以JSON Web令牌(JWT)的格式返回,然后将其发送到服务器,然后使用JWT库(网上提供)对其进行解码。此时,您有用户标识和他们的电子邮件地址。您应该通过将令牌发送给Google来验证令牌,以确保令牌已发出,并检查令牌中的客户端ID是否与您在Google API控制台项目中使用的令牌相匹配。

我测试过了,它工作。无需在设备上存储密码,也不需要请求用户关闭的任何奇怪权限。但是,用户必须忍受泄露他们的电子邮件地址,但大多数人通常没有问题。但是,您可以在应用程序中告诉您的用户,如果这有助于获得更多信任,则不会存储他们的电子邮件地址或其他信息。

这里也是一个在线工具,可以解码JWT令牌可以在开发过程中使用快速查看哪些数据令牌包含:通过帐户ID

Decode JWT token

相关问题