2012-10-05 57 views
8

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

我发送谷歌帐户名称(Gmail地址)到服务器,但能够验证它与服务器上的谷歌,我要求在Android设备上的oauth令牌,并将其发送到服务器以及。

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

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

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

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

+0

我不认为有可能无需登录(帐户名+密码)验证用户accout名称。 以任何方式使用oAuth(首次登录)或直接登录 - 您必须使用pair(login + pass)。 我有更新的答案,从任何身份验证服务,如不正确的密码登录“xxx”。 –

+0

本文可能有所帮助:http://android-developers.blogspot.com.es/2013/01/verifying-back-end-calls-from-android.html?m=1 – mjn

+0

@mjn谢谢,这就是我正在寻找!随意添加它作为答案,所以我可以接受它。 –

回答

1

本文给出了详细的 - 无线个源代码 - 验证过程的描述:

由蒂姆·布雷

短版

Verifying Back-End Calls from Android Apps:您可以使用GoogleAuthUtil类,可通过 谷歌Play服务来获取一个字符串称为“ID令牌” 。您将 发送给您的后端,您的后端可以使用它快速且便宜地验证哪个应用发送了该应用,以及谁正在使用 应用,以便 。

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

2

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

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

+0

不要太教条,是不是可以用密码登录? :)) –

+0

对不起,我不是故意的。服务器端的Google帐户授权需要有效的oauth令牌。 –

3

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

唯一的其他(可靠)做到这一点的方法是发送电子邮件到他们的GMail地址随机令牌,并让他们输入它的应用程序。这可以让你确认他们可以访问电子邮件,所以它必须是他们的(除非他们偷了别人的设备)。

或者您可以简单地相信,如果用户在其设备上注册了该帐户,那么它确实是他们的帐户,因为他们在激活设备时至少进行了一次验证。然后,您只需按照原样使用Gmail地址,这可能会或可能不足以满足您的应用程序的需求。

+0

谢谢我已经在做你正在建议的内容(正如你在另一个回答中所建议的那样)。问题是可以从任何地方调用服务器端api,并且必须在接受它们之前验证帐户声明。也可以使用GCM来验证每个设备,但是一个有根的设备可以伪造一个帐户。 –

+0

验证真正的令牌是唯一可靠的事情(我知道)。 –

1

我建议这样的:

  • 在设备

    1. 选择帐户(获得的电子邮件地址)

    2. 请求OAuth凭证

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

  • 在服务器

    1. 使用谷歌的API,以从令牌

    2. 检索用户基本信息比较由谷歌与收到一个返回的电子邮件地址

+0

请阅读我的问题,我已经在做这个。 –

+0

你所要求的是不可能的,而这应该是要走的路。 – shkschneider

相关问题