安卓:验证服务器上的设备谷歌帐户名称



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

我将谷歌帐户名(gmail地址)发送到服务器,但为了能够在服务器上与谷歌进行验证,我在安卓设备上请求oauth令牌,并将其发送到服务器。

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

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

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

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

使用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地址,这对你的应用程序来说可能不够,也可能不够。

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

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

本文用源代码详细描述了验证过程:

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

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

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

我建议这样做:

  • 设备上

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

    2. 请求OAuth令牌

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

  • 服务器上

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

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

相关内容

  • 没有找到相关文章

最新更新