我在Authenticating against App Engine from Android
上关注了Nick Johnson的教程无论如何使用联合登录获得相同的工作流程(没有网络登录)(即使支持仅限于Google帐户)?
[编辑] 其他信息
目前的设置包括:
UserService
已配置为联合登录(openId..gmail,aol,myspace?,...)所有身份验证类型都包含在UserService
中,因此我可以调用UserService.getCurrentUser()
(类似于Appengine的UserService,但支持twitter和facebook)。
帐户可以将多个身份验证方法链接在一起。
到目前为止,客户端都是基于Web的,并且工作正常。的:d
我想:
有哪些选择?
我一直在考虑限制Android应用的Google帐户身份验证,以避免基于网络的登录屏幕。即便如此,支持Facebook和Twitter的网络Api会很好。
答案 0 :(得分:4)
不,OpenID是基于浏览器的身份验证标准 - 它依赖于用户被定向到外部身份验证页面,然后返回到应用页面。
您可以通过WebView
内的Dialog
进行此操作,以获得流畅的用户体验。有关示例实现,请参阅LeanEngine开源项目:server和client。服务器有点复杂,因为它支持Facebook和OpenID登录。 OpenID只登录会更简单。您基本上只需要客户端示例。
但是,如果您不需要OpenID并且愿意将用户限制为Google帐户,则可以使用Google ClientLogin API。一个example usage。
答案 1 :(得分:3)
我几个星期以来一直在研究这个话题,我终于在隧道尽头看到了光明。我希望你至少可以从我的研究中得到一些指示。首先,我刚刚意识到(http://softwareas.com/oauth-openid-youre-barking-up-the-wrong-tree-if-you-think-theyre-the-same-thing)OpenID和OAuth不是同样的事情,虽然它们可以结合使用。我的Google App Engine应用程序配置了Google Accounts API,目前我只有一个Android客户端。我是上面提到的尼克约翰逊超级知名博客的宗教信徒。因此,我使用Android客户端中的AccountManager实例与我的App Engine应用程序进行无缝身份验证,无需向用户询问凭据,也无需重定向到浏览器/ webview等。
就像你想为你的GAE应用程序打开一个公共API,我也希望扩展我的客户群以拥有其他客户端,如基于Web的客户端,python API,iOS客户端等,这些都没有这个方便的AccountManager。因此,OAuth是显而易见的选择。以下是Google App Engine团队的Ikai Lan撰写的一篇文章,演示如何使用OAuth对GAE应用进行身份验证:http://ikaisays.com/2011/05/26/setting-up-an-oauth-provider-on-google-app-engine/
有趣的是,我认为在客户端使用Oauth需要使用OpenID / Federated登录配置GAE应用程序。但这种情况并非如此。因此,对我而言,也可能对您而言,解决方案很简单 - 在Android客户端上,根据Nick的博客使用AccountManager。在其他客户端上,使用Oauth,并将用户重定向到Google帐户页面以启用身份验证(请参阅我在上一段中谈到的Ikai Lan的文章。)
尽管如此,您可以避免在Android客户端上进行基于Web的登录,但不能在其他任何地方进行登录。您必须以某种方式至少对用户进行一次身份验证。希望基于浏览器的登录仅在第一次发生,浏览器会缓存未来的请求。
祝你好运!