只允许连接sails.js中授权的套接字

我正在尝试在sails.js后端(使用0.12.x版本)中为socket.io客户端实现某种安全性。 为了达到这个目的,我试图阻止没有正确的cookie(预先没有授权的会话)的客户握手成功,或者使用passport.js来查看客户端是否被authentication。

在Sails.js文档中,我发现这应该是可能的,但我找不到任何提示,如何真正做到这一点。 另一方面,在互联网上寻找例子,人们大多不使用安全套接字,或使用一些旧版本的sails.js(<0.10)。

到目前为止我发现的最接近的是config/sockets.js

 beforeConnect: function(handshake, cb) { if (handshake.headers.cookie) { console.log(handshake); // TODO: check session authorization } else { return cb(null, false); } return cb(null, true); }, 

这应该检查与握手发送的cookie,如果它有一个适当的会话。 我很难搞清楚,我怎样才能将cookie中的sid映射到sails.js中的当前会话,以决定是否允许连接。

问题:

  • socket.io最好的安全措施是什么,如果只允许less量的客户端(大约40-50个dynamic生成的用户应该被允许进行连接),还有其他人呢?
  • 如何将cookie中的sails.sid映射到活动会话?
  • 其他的configuration可能是我的目标的捷径(例如设置一些策略,socket.io请求使用与http相同的中间件)?

感谢您的任何提示,链接或build议。

socket.io最好的安全措施是什么,如果只允许less量的客户端(大约40-50个dynamic生成的用户应该被允许进行连接),还有其他人呢?

我不知道什么是最好的。 但是有两种常用的方法: 基于标记和基于cookie的authentication

以下是从https://auth0.com/blog/auth-with-socket-io/获得的一个很好的可视&#x5316;

在这里输入图像说明

我非常喜欢令牌方式,因为不需要会话存储。 因此,服务器应用程序与客户端分离,也是无状态的。

如何将cookie中的sails.sid映射到活动会话?

令牌方法:检查出jsonwebtoken 。 当用户login时,您会生成一个令牌并将其发送给客户端:

 res.json({ user: user, token: jwToken.issue({id : user.id }) }); 

此外,您需要一个策略来检查令牌是否存在并validation它:

 jwToken.verify(token, function (err, token) { if (err) return res.json(401, {err: 'Invalid Token!'}); req.token = token; next(); }); 

我find了一个完整的教程,可以帮助你: https : //thesabbir.com/how-to-use-json-web-token-authentication-with-sails-js/

如何使用sails进行configuration:你基本上只是发送带有每个socket.io请求的令牌,并检查策略中的令牌:

SailsJS – 使用sails.io.js和JWT