![](/img/trans.png)
[英]Android Cloud to Device Messaging without google account
[英]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文档。
我建议这样:
在设备上
选择一个帐户(获取电子邮件地址)
请求OAuth令牌
将电子邮件+令牌发送到服务器
在服务器上
使用Google的API从令牌中检索基本用户信息
将Google返回的电子邮件地址与收到的电子邮件地址进行比较
本文详细介绍了 - 源代码 - 验证过程的描述:
通过Tim Bray 验证Android应用程序的后端呼叫
简短版本:您使用通过Google Play服务提供的GoogleAuthUtil类来检索名为“ID令牌”的字符串。 您将令牌发送到后端,后端可以使用它快速,低成本地验证发送给它的应用程序以及使用该应用程序的用户。
通过本文中的信息,我可以轻松实现客户端和服务器端Android和JavaEE代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.