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