繁体   English   中英

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

[英]Android: Verify device google account name on server

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

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

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

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

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

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

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

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

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

我建议这样:

  • 在设备上

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

    2. 请求OAuth令牌

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

  • 在服务器上

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

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

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

通过Tim Bray 验证Android应用程序的后端呼叫

简短版本:您使用通过Google Play服务提供的GoogleAuthUtil类来检索名为“ID令牌”的字符串。 您将令牌发送到后端,后端可以使用它快速,低成本地验证发送给它的应用程序以及使用该应用程序的用户。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM