我正在尝试在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中的当前会话,以决定是否允许连接。
问题:
感谢任何提示,链接或建议。
答案 0 :(得分:1)
socket.io的最佳安全做法是什么,如果只是一个小的 允许客户端数量(大约40-50个动态生成的用户 应该被允许连接),还有其他人吗?
我不知道什么是最好的。但有两种常见的方法:基于令牌和cookie的身份验证。
以下是来自https://auth0.com/blog/auth-with-socket-io/
的两个很好的可视化我非常喜欢令牌方法,因为不需要会话存储。因此,服务器应用程序与客户端分离,也是无状态的。
如何将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请求的令牌并检查策略中的令牌: