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

时间:2016-08-28 07:49:02

标签: node.js sockets security socket.io sails.js

我正在尝试在sails.js后端(使用版本0.12.x)中为socket.io客户端实现某种安全性。为了实现这一点,我试图阻止客户端成功握手,没有适当的cookie(事先没有授权会话),或者像使用passport.js查询客户端是否经过身份验证的HTTP请求。

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

我发现的最接近的是[{1}}:

config/sockets.js

这应检查通过握手发送的cookie,如果它有正确的会话。我很难搞清楚,如何将sid从cookie映射到sails.js中的当前会话,以决定是否允许连接。

问题:

  • socket.io的最佳安全做法是什么,如果只允许少量客户端(应该允许40-50个动态生成的用户进行连接),还有其他人没有?
  • 如何将sails.sid从cookie映射到活动会话?
  • 其他配置可能是我的目标的快捷方式(例如,设置一些策略,socket.io请求使用与http相同的中间件)?

感谢任何提示,链接或建议。

1 个答案:

答案 0 :(得分:1)

  

socket.io的最佳安全做法是什么,如果只是一个小的   允许客户端数量(大约40-50个动态生成的用户   应该被允许连接),还有其他人吗?

我不知道什么是最好的。但有两种常见的方法:基于令牌和cookie的身份验证

以下是来自https://auth0.com/blog/auth-with-socket-io/

的两个很好的可视化

enter image description here

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

  

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

令牌方法:查看jsonwebtoken。当用户登录时,您生成令牌并将其发送到客户端:

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

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

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

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

如何使用sails配置它:您基本上只是发送每个socket.io请求的令牌并检查策略中的令牌:

SailsJS - using sails.io.js with JWT