authenticationsocket io连接

我如何authentication一个socket.io连接? 我的应用程序使用来自另一台服务器(python)的login端点来获取令牌,每当用户在节点端打开一个套接字连接时,如何使用该令牌?

io.on('connection', function(socket) { socket.on('message', function(message) { io.emit('message', message); }); }); 

而客户端:

 var token = sessionStorage.token; var socket = io.connect('http://localhost:3000', { query: 'token=' + token }); 

如果令牌是在python中创build的:

 token = jwt.encode(payload, SECRET_KEY, algorithm='HS256') 

我怎样才能使用这个令牌来validation节点中的套接字连接?

如果令牌是在另一台服务器上创build的,则无关紧要。 如果您拥有正确的密钥和algorithm,您仍然可以validation它。

jsonwebtoken模块实现

客户

 var token = sessionStorage.token; var socket = io.connect('http://localhost:3000', { query: {token: token} }); 

服务器

 var io = require('socket.io')(); var jwt = require('jsonwebtoken'); io.use(function(socket, next){ if (socket.handshake.query && socket.handshake.query.token){ jwt.verify(socket.handshake.query.token, 'SECRET_KEY', function(err, decoded) { if(err) return next(new Error('Authentication error')); socket.decoded = decoded; next(); }); } next(new Error('Authentication error')); }) .on('connection', function(socket) { // Connection now authenticated to receive further events socket.on('message', function(message) { io.emit('message', message); }); }); 

socketio-jwt模块实现

这个模块使得客户端和服务器端的authentication更加容易。 只要看看他们的例子。

客户

 var token = sessionStorage.token; var socket = io.connect('http://localhost:3000'); socket.on('connect', function (socket) { socket .on('authenticated', function () { //do other things }) .emit('authenticate', {token: token}); //send the jwt }); 

服务器

 var io = require('socket.io')(); var socketioJwt = require('socketio-jwt'); io.sockets .on('connection', socketioJwt.authorize({ secret: 'SECRET_KEY', timeout: 15000 // 15 seconds to send the authentication message })).on('authenticated', function(socket) { //this socket is authenticated, we are good to handle more events from it. console.log('hello! ' + socket.decoded_token.name); }); 

你可以使用这个url。

 var socket = SocketIOClient(socketURL: URL(string: "http://00.00.00.00:port")!, config: SocketIOClientConfiguration(arrayLiteral: SocketIOClientOption.connectParams(["token": "your secret key"])))