连接套接字后是否可以运行身份验证? 现在我这样做:
io.sockets.on('connection', function (socket) {
socket.on('login', function (token) {
// this is where I currently authtificate users
});
});
如果我没错,在这种情况下套接字打开"连接"并挂在那里"登录"事件可能永远不会被调用。如果有人想要攻击我的服务器,他们可以简单地打开数千个套接字连接。我怎样才能对"连接"进行身份验证,我的意思是马上?因此,如果失败,我将能够立即关闭套接字。
谢谢!
答案 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");