我正在尝试在sails.js后端中为socket.io客户端实现某种安全性(使用版本0.12.x)。为实现此目的,我尝试为没有适当cookie(预先没有授权的会话)的客户端阻止成功的握手,或者通过使用password.js来查看客户端是否已通过身份验证的HTTP请求。
在Sails.js文档中,我发现这应该可行,但是我找不到任何提示,如何做到这一点。另一方面,在Internet上查找示例时,人们通常不使用安全套接字,也不使用某些旧版本的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。我很难弄清楚如何将sid从cookie映射到sails.js中的当前会话,以确定是否应允许连接。
问题:
感谢您的任何提示,链接或建议。
如果只允许少量客户端(应该允许40-50个动态生成的用户进行连接),并且没有其他人,socket.io的最佳安全实践是什么?
我不知道什么是最好的。但是有两种常见的方法:基于令牌和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/
如何用帆进行配置:您基本上只需在每个socket.io请求中发送令牌,然后在策略内检查令牌:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句