最安全的node.js / expressauthentication机制

我想用express来开发一个node.js应用程序。 该应用程序将支持多个访问级别。 所有用户将通过用户名和密码进行authentication。 我一直使用的authentication方法如下:

  1. 用户已通过用户名和密码进行身份validation
  2. 使用会话支持安装Express后,我使用request.session对象来存储所有用户的信息和证书,并且每当新的调用从同一用户进入服务器时,我都会检查它

这个过程有多安全? 它使用cookies吗? 它是否有漏洞? 通过websockets和socket.io或其他不同方式控制会话更安全吗? 提前致谢

如果您将设置,Express中的会话将使用Cookie。 它将交换用于触发服务器端会话恢复的长键。
服务器端的会话数据不通过cookie与客户端共享。 您可以在响应中validation这个请求的页眉,在服务器端启用会话的页面。
Socket.IO能够在握手过程中恢复会话数据,因为它作为正常的HTTP请求启动,并且还交换cookie,以及用于validation用户身份的另外一个用于会话还原的另一个validation。

只要被盗的cookies不能从另一个远程端点和浏览器访问,这是非常高效和安全的。

为了使不同的用户types具有不同的访问限制,我使用了在路由声明中非常方便的中间件函数。
从编码的angular度来看,他们可能是这样的:

var userTypes = { any: function(types) { return function(req, res, next) { if (types.indexOf(req.session.user.type) != -1) { return next(); } else { return next(new Error('permission denied')); } } }, is: function(type) { return function(req, res, next) { if (req.session.user.type == type) { return next(); } else { return next(new Error('permission denied')); } } } } app.get('/items', userTypes.any([ 'developer', 'admin' ]), function(req, res, next) { // will execute if user type is developer or admin }); app.use(function(err, req, res, next) { console.log(err); res.send(err); }); 

中间件与上一个接受reqresnext函数具有相同的function,所以你可以访问会话数据,如果有效的话或next(new Error('reason')); ,可以调用next() next(new Error('reason')); 那将不会继续中间件的连锁function,而是会popup来处理错误的路由。
如果你有一连串的路线应该尝试回退,那么不要再返回next(new Error()); 你可能希望在某个地方有req标志,然后检查最后一个路由callback,如果不是, allowed检查是否allowed – 调用next()将尝试find适合查询的另一个路由。