单页应用上的用户身份验证?

我开发了一个单页面应用程序原型,它在前端使用Backbone,并将从服务器上的瘦RESTful API消耗数据。

来自沉重的服务器端应用程序开发(PHP和Python),我真的很喜欢新的不同的设计方法与厚的客户端MVC,但很困惑如何将应用程序限制为登录身份验证的用户。

我更喜欢将应用程序本身放在登录后面,并且还希望除了网站的本地登录外,还最终实现其他类型的登录(openid,fb connect等)。 我不清楚这是如何完成的,并且一直在寻找 - 但是找到明确告诉我的信息却没有成功。

总的来说,注册用户并要求他们登录才能使用您的单页应用程序的最佳做法是什么?

一旦用户登录,api请求如何验证? 我可以存储一个会话,但是如何在API调用中检测此会话,还是有必须在每个API调用中传递一个令牌? 任何答案将非常感谢!


我们使用基于cookie的django身份验证,并为登录和单页面应用程序提供单独的页面。 在我们的用例中工作得很好。 我们使用了我在这里描述的基于Backbone的会话管理系统:backbone.js - 处理用户是否登录


我见过的最RESTful的方式是基于OAuth客户端凭据流,基本上是一个/ token端点,您发布的用户名/密码将为此会话返回一个访问令牌。 每个ajax请求之后都会附加一个Authorization承载头和令牌。 您可以将令牌存储在全局变量中,直到页面刷新/关闭,使用本地存储来保持用户在会话之间登录或JavaScript cookie。 如果你不喜欢令牌的想法,那么你可以只使用旧的cookie方法,无论如何都会自动发送任何ajax请求。

至于Facebook /谷歌等我通常遵循的stackoverflow方法,我把外部userlogins关联到一个帐户。 然后使用一个相当普通的基于服务器的oauth舞蹈(虽然你可以用ajax请求将所有请求替换为服务器,只需稍作修改,但我发现它并没有太大区别,因为无论如何都需要在你和服务器之间重定向)。 我通常为facebook登录发出加密的cookie,然后使用上述类似的方法将其转换为令牌(只需发送包含请求而不是用户名/密码的cookie)。


我们使用的是Angular.js,并且有一个单独的登录页面。 单独的页面加载单独的单个页面(和安全)应用程序,该应用程序使用http XHR请求调用服务器,发送用户名和密码。 如果服务器验证了凭据,那么javascript代码会设置一个cookie。 这个cookie可以从“另一端”读取,也就是说,这个非安全应用程序。 在cookie中,我们只输入用户名,当然也没有密码或其他安全信息。 那么我们可以展示'Not Lior?' 注销“不安全的应用程序。

唯一需要注意的是重写Angular的cookie机制来设置无限期到期,最重要的是,根路径:

$document[0].cookie = 'username=' + escape($scope.userName) + ";expires=Thu, 01 Jan 2970 00:00:00 GMT; Path=/";
链接地址: http://www.djcxy.com/p/21961.html

上一篇: Authentication for users on a Single Page App?

下一篇: Securing REST API without reinventing the wheel