node.js + socket.io立即验证

时间:2014-03-20 05:52:58

标签: node.js socket.io

连接套接字后是否可以运行身份验证? 现在我这样做:

io.sockets.on('connection', function (socket) {
    socket.on('login', function (token) {
    // this is where I currently authtificate users
    });
});

如果我没错,在这种情况下套接字打开"连接"并挂在那里"登录"事件可能永远不会被调用。如果有人想要攻击我的服务器,他们可以简单地打开数千个套接字连接。我怎样才能对"连接"进行身份验证,我的意思是马上?因此,如果失败,我将能够立即关闭套接字。

谢谢!

1 个答案:

答案 0 :(得分:1)

当客户端尝试连接时,可以运行身份验证。 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");