该服务在GAE上运行,并具有Web客户端和Android本机客户端。
这是我第一次尝试这样的东西,我一直在阅读关于OpenID和Android AccountManager库。
我仍然不确定在将用户存储在我的数据存储区方面有哪些选项。我应该使用什么标识符?是否可以在本机Android应用程序上使用OpenID?
任何帮助和/或指针将不胜感激。谢谢。
我们对最后一个项目有类似的要求:GAE后端与GWT前端和Android / iPhone客户端。此外,我们不想存储用户凭据。所以我们选择使用OpenID,这是不幸的是一个Web标准,并不能很好地与移动设备,但是可行。
在GAE方面,我们只需启用联合登录,它提供了OpenID。
在移动设备上,当用户需要登录时,我们向他们提供OpenID验证器列表(Google,Yahoo等)。然后我们打开一个本地浏览器(不是嵌入式浏览器),并直接用户选择OpenID认证站点。好处是用户的浏览器通常已经记住了用户名/密码,所以这一步只需要用户按一个按钮。
这一切都很简单。现在这里是棘手的部分:
用户确认登录后,OpenID重定向回我们的GAE返回url(您需要提供此URL的请求时)。在此网址上,我们创建了一个自定义网址,例如:
yourappname://usrname#XXXYYYZZZ
其中XXXYYYZZZZ是身份验证令牌。我们从返回页面获取这个令牌,它被存储为一个ACSID cookie:我们使用一些JSP来读取这个cookie并将其包装到自定义URL上面。
然后我们注册我们的Android和iPhone应用程序来处理yourappname:// URLs,这样当用户cliskc这个链接时,我们的应用程序被调用,并且链接被传递给它。我们从此链接中提取用户名和令牌,并将其用于向GAE后端的REST请求中。
如果你有任何其他问题,我会很乐意更新这篇文章。
更新:
生产AppEngine上的用户会话cookie命名为ACSID,而在开发AppEngine服务器上,它的名称为dev_appserver_login。