Android:验证服务器上的设备Google帐户名称

时间:2012-10-05 10:01:48

标签: android oauth-2.0 google-api

我正在开发一个Android应用,它使用设备上提供的Google帐户来验证用户到服务器端组件。

我将谷歌帐户名称(gmail地址)发送到服务器但是为了能够在服务器上使用谷歌验证它,我在Android设备上请求oauth令牌并将其发送到服务器。

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

还有AccountManager.getPassword(account)但我不喜欢沟通或使用用户密码。

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

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

4 个答案:

答案 0 :(得分:3)

使用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地址,这可能适用于您的应用,也可能不适用。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我会建议:

  • 在设备上

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

    2. 申请OAuth令牌

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

  • 在服务器上

    1. 使用Google的API从令牌

    2. 中检索基本用户信息
    3. 将谷歌返回的电子邮件地址与收到的电子邮件地址进行比较

答案 3 :(得分:1)

本文详细介绍了 - 源代码 - 验证过程的描述:

Tim Bray的

Verifying Back-End Calls from Android Apps

  

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

通过本文中的信息,我很容易实现客户端和服务器端的Android和JavaEE代码。