【问题标题】:oAuth 2.0 scope for user ID from Google accountoAuth 2.0 来自 Google 帐户的用户 ID 范围
【发布时间】:2014-02-26 19:05:21
【问题描述】:

我想使用 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 的登录显示请求的权限“知道您在 Google 上的身份” - 失去大量用户的好方法。

【问题讨论】:

  • 帐户 ID 是什么意思,它与他们的电子邮件地址有何不同?
  • 帐户 ID 通常是一个数字,尽管它可以是一些长字符串。它通常不会向应用程序透露。该应用程序将首先检索一个令牌,然后将其发送到我的服务器,然后使用它来检索存储的用户 ID。

标签: android oauth-2.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 匹配。

我已经对此进行了测试,并且可以正常工作。无需在设备上存储密码,也无需请求任何可能让用户关闭的奇怪权限。然而,用户不得不忍受泄露他们的电子邮件地址,但大多数人通常不会有这样的问题。但是,如果这有助于获得更多信任,您可以在应用中告诉您的用户您不存储他们的电子邮件地址或其他信息。

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

Decode JWT token

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 2023-03-17
    • 2021-12-25
    • 1970-01-01
    • 2014-09-16
    • 2020-09-06
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多