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

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/

10-16 20:50