单页应用程序的用户身份validation?
我开发了一个单一页面的应用程序原型,在前端使用Backbone,并从服务器上的精简RESTful API消耗数据。
来自沉重的服务器端应用程序开发(PHP和Python),我真的很喜欢用厚的客户端MVC新的不同的devise方法,但很困惑如何最好的限制应用程序login身份validation的用户。
我更喜欢将应用程序本身放在login后面,并且还希望除了站点的本地login之外,还最终实现其他types的login(openid,fb connect等)。 我不清楚这是怎么做的,一直在寻找 – 但是找不到信息让我很清楚。
总的来说,当前注册用户的最佳做法是什么,并要求他们login才能使用您的单页面应用程序?
一旦用户login,api请求如何validation? 我可以存储一个会话,但是如何在API调用中检测此会话,还是在每个API调用中都必须传递一个令牌? 任何答案,将不胜感激!
我们使用基于cookie的django身份validation,并为login和单页面应用程序提供单独的页面。 在我们的用例中工作得很好。 我们使用了这里描述的基于Backbone的会话pipe理系统: backbone.js – 处理用户是否login
我所见过的最RESTful的方式是基于OAuth客户端凭据stream,基本上是一个/ token端点,您发布的用户名/密码将返回此会话的访问令牌。 每个ajax请求之后附加一个Authorization
承载头与令牌。 您可以将令牌存储在全局variables中,直到页面刷新/closures,使用本地存储来保持会话之间的用户login或JavaScript cookie。 如果你不喜欢令牌的想法,那么你可以使用旧的cookie方法,它自动发送任何ajax请求。
至于Facebook /谷歌等我通常遵循的stackoverflow方法,我把外部userlogins关联到一个帐户。 然后使用一个相当普通的基于服务器的oauth舞蹈(虽然你可以用ajax请求稍微修改所有的请求到服务器,但我发现它并没有太大的区别,因为你需要在服务器和服务器之间redirect)。 我通常为facebooklogin发出一个encryption的cookie,然后使用类似于上面的方法将其转换为令牌(只需发送包含请求而不是用户名/密码的cookie)。
我们使用的是Angular.js,还有一个单独的login页面。 单独的页面加载单独的单个页面(和安全)应用程序,使用http XHR请求调用服务器,发送用户名和密码。 如果服务器validation了凭据,那么javascript代码会设置一个cookie。 这个cookie可以从“另一端”读取,也就是说,这个非安全的应用程序。 在cookie中,我们只提供用户名,当然也没有密码或其他安全信息。 那么我们可以展示“不是Lior? 注销“不安全的应用程序。
唯一需要注意的是重写Angular的cookie机制来设置无限期到期,最重要的是根path:
$document[0].cookie = 'username=' + escape($scope.userName) + ";expires=Thu, 01 Jan 2970 00:00:00 GMT; Path=/";