连接套接字后是否可以运行身份验证?
现在,我这样做:
io.sockets.on('connection', function (socket) {
socket.on('login', function (token) {
// this is where I currently authtificate users
});
});
如果在这种情况下我没记错的话,套接字会在“连接”上打开并挂在那里,并且可能永远不会调用“登录”事件。如果有人想攻击我的服务器,他们只需打开数千个套接字连接即可。我的意思是我该如何在“连接”上进行身份验证?因此,如果失败,我将能够立即关闭套接字。
谢谢!
最佳答案
客户端尝试连接时可以运行身份验证。 Socket.io具有一种机制,可在客户端尝试连接到服务器时对它们进行授权,但是默认情况下禁用了授权。当套接字尝试连接到服务器时,有一个handshake
对象,该对象具有请求查询和请求标头等。您可以通过以下方法强制执行授权:
io.configure(function (){
io.set('authorization', function (handshakeData, callback) {
if(handshakeData.query.token == "somevalue"){
callback(null, true); // this will allow the client to connect
}else{
callback(null, false); // this will prevent the client from connecting
}
});
});
在客户端,您可以发送如下查询字符串:
var socket = io.connect("http://yourIP:Port?token=somevalue");
关于node.js - 立即对node.js + socket.io进行身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22524518/