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"])))