【问题标题】:Android: Verify device google account name on serverAndroid:在服务器上验证设备谷歌帐户名称
【发布时间】:2012-09-26 11:19:45
【问题描述】:

我正在开发一个 android 应用程序,它使用设备上可用的 google 帐户向服务器端组件验证用户。

我将 google 帐户名称(gmail 地址)发送到服务器,但为了能够在服务器上使用 google 进行验证,我在 android 设备上请求了一个 oauth 令牌并将其发送到服务器。

问题是,虽然我不需要访问其他用户信息,但我必须使用 oauth 电子邮件范围,它会打开一个确认对话框。我不喜欢这个对话框,因为我要验证帐户名而不访问用户信息。

也有AccountManager.getPassword(account),但我不喜欢交流也不喜欢使用用户密码。

也可以像 Web 应用一样使用 WebView 和身份验证用户(例如使用 OpenId),但这似乎不是设备上的最佳解决方案。

还有其他/更好的方法来验证服务器上的设备帐户名称吗?

【问题讨论】:

  • 我认为没有登录(帐户名+密码)就无法验证用户帐户名。无论您以何种方式使用 oAuth(首次登录)或直接登录 - 您都必须使用配对(登录 + 密码)。我从任何身份验证服务中看到了更新的答案,例如登录“xxx”的密码不正确。
  • 这篇文章可能会有所帮助:android-developers.blogspot.com.es/2013/01/…
  • @mjn 谢谢,这就是我想要的!随意将其添加为答案,以便我接受。

标签: android oauth-2.0 google-api


【解决方案1】:

如果没有有效的令牌,就无法验证 Google 帐户。您可能需要参考下面的官方 Android 文档。

http://developer.android.com/training/id-auth/index.html

【讨论】:

  • 别太教条了,是不是不能用密码登录? :))
  • 对不起,我不是故意的。服务器端对 Google 帐号的授权需要有效的 oauth 令牌。
【解决方案2】:

使用 AccountManager 或 Google Play 服务获取用户配置文件的 OAuth2 令牌(范围:https://www.googleapis.com/auth/userinfo.profile)。然后使用 Google 端点 (https://accounts.google.com/o/oauth2/tokeninfo) 进行验证,并可选择获取用户信息。此处提供了一个示例应用程序:http://oauthssodemo.appspot.com。您似乎正在做类似的事情,如果是这样,这是正确的(或至少是推荐的)方法。 顺便说一句,您无法获取用户密码,因为您没有使用与帐户提供者相同的证书进行签名。

唯一的其他(可靠)方法是向用户发送一封带有随机令牌的电子邮件到他们的 GMail 地址,然后让他们将其输入到应用程序中。这使您可以验证他们是否可以访问电子邮件,因此它必须是他们的(当然,除非他们偷了别人的设备)。

或者您可以简单地相信,如果用户在他们的设备上注册了该帐户,它确实是他们的帐户,因为他们在激活设备时至少进行了一次身份验证。然后,您只需按原样使用 Gmail 地址,这对于您的应用来说可能不够,也可能不够。

【讨论】:

  • 谢谢我已经在做你所建议的事情(正如你在另一个答案中所建议的那样)。问题是可以从任何地方调用服务器端 api,我必须在接受它们之前验证帐户声明。也可以使用 GCM 来验证每台设备,但随后有根设备可以伪造帐户。
  • 验证一个真正的令牌是唯一可靠的事情(据我所知)。
【解决方案3】:

我建议这样做:

  • 在设备上

    1. 选择一个帐户(获取电子邮件地址)

    2. 请求 OAuth 令牌

  • 发送邮件+token到服务器

  • 在服务器上

    1. 使用 Google 的 API 从令牌中检索基本用户信息

    2. 比较谷歌返回的邮箱地址和收到的邮箱地址

【讨论】:

  • 你所要求的是不可能的,这应该是要走的路。
【解决方案4】:

本文给出了详细的-附源码-验证过程的说明:

Verifying Back-End Calls from Android Apps 蒂姆·布雷

短版:您使用 GoogleAuthUtil 类,可通过 Google Play 服务,用于检索称为“ID 令牌”的字符串。你 将令牌发送到您的后端,您的后端可以使用它 快速且廉价地验证哪个应用程序发送了它以及谁在使用 应用程序。

借助本文中的信息,我可以轻松实现客户端和服务器端 Android 和 JavaEE 代码。

【讨论】:

    猜你喜欢
    • 2022-07-25
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2020-08-23
    相关资源
    最近更新 更多