8

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

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

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

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

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

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

4

4 回答 4

3

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

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

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

于 2012-10-12T07:03:14.677 回答
2

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

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

于 2012-10-10T02:19:03.390 回答
1

这篇文章给出了一个详细的 - 附源代码 - 验证过程的描述:

Tim Bray验证来自 Android 应用程序的后端调用

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

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

于 2014-11-08T09:51:35.117 回答
1

我建议这样做:

  • 在设备上

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

    2. 请求 OAuth 令牌

  • 将电子邮件 + 令牌发送到服务器

  • 在服务器上

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

    2. 将 google 返回的电子邮件地址与收到的电子邮件地址进行比较

于 2012-10-13T21:50:22.850 回答