使用联合登录(OpenID)从Android应用程序对App Engine进行身份验证

时间:2012-01-05 19:26:31

标签: android google-app-engine oauth openid

我在Authenticating against App Engine from Android

上关注了Nick Johnson的教程

无论如何使用联合登录获得相同的工作流程(没有网络登录)(即使支持仅限于Google帐户)?

[编辑] 其他信息

目前的设置包括:

  • App Engine的UserService已配置为联合登录(openId..gmail,aol,myspace?,...)
  • Facebook(OAuth)
  • Twitter(OAuth)

所有身份验证类型都包含在UserService中,因此我可以调用UserService.getCurrentUser()(类似于Appengine的UserService,但支持twitter和facebook)。

帐户可以将多个身份验证方法链接在一起。

到目前为止,客户端都是基于Web的,并且工作正常。的:d

我想:

  1. 添加公开Api(适用于网络和原生移动应用),
  2. 在内部使用Api进行原生移动应用。
  3. 有哪些选择?

    我一直在考虑限制Android应用的Google帐户身份验证,以避免基于网络的登录屏幕。即便如此,支持Facebook和Twitter的网络Api会很好。

2 个答案:

答案 0 :(得分:4)

不,OpenID是基于浏览器的身份验证标准 - 它依赖于用户被定向到外部身份验证页面,然后返回到应用页面。

您可以通过WebView内的Dialog进行此操作,以获得流畅的用户体验。有关示例实现,请参阅LeanEngine开源项目:serverclient。服务器有点复杂,因为它支持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的登录,但不能在其他任何地方进行登录。您必须以某种方式至少对用户进行一次身份验证。希望基于浏览器的登录仅在第一次发生,浏览器会缓存未来的请求。

祝你好运!