tutorial socket rooms example node.js flask socket.io token

node.js - rooms - Autenticación de conexiones de socket io



socket.io https (2)

No importa si el token se creó en otro servidor. Aún puede verificarlo si tiene la clave secreta y el algoritmo correctos.

Implementación con módulo jsonwebtoken

cliente

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

Servidor

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(); }); } else { 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); }); });

Implementación con módulo socketio-jwt

Este módulo facilita mucho la autenticación tanto en el lado del cliente como del servidor. Solo mira sus ejemplos.

cliente

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 });

Servidor

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); });

¿Cómo puedo autenticar una conexión socket.io? Mi aplicación usa un punto final de inicio de sesión desde otro servidor (python) para obtener un token, ¿cómo puedo usar ese token cada vez que un usuario abre una conexión de socket en el lado del nodo?

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

Y el lado del cliente:

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

Si el token se crea en python:

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

¿Cómo puedo usar este token para autenticar una conexión de socket en el nodo?


puedes usar esta url.

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