반응형
소켓 io 연결 인증
socket.io 연결을 어떻게 인증 할 수 있습니까? 내 애플리케이션은 다른 서버 (python)의 로그인 엔드 포인트를 사용하여 토큰을 얻습니다. 사용자가 노드 측에서 소켓 연결을 열 때마다 해당 토큰을 어떻게 사용할 수 있습니까?
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
});
토큰이 파이썬으로 생성 된 경우 :
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
이 토큰을 사용하여 노드에서 소켓 연결을 인증하려면 어떻게해야합니까?
토큰이 다른 서버에서 생성되었는지 여부는 중요하지 않습니다. 올바른 비밀 키와 알고리즘이 있으면 계속 확인할 수 있습니다.
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();
});
} 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);
});
});
socketio-jwt
모듈로 구현
이 모듈은 클라이언트 측과 서버 측 모두에서 인증을 훨씬 쉽게 만듭니다. 그들의 예를 확인하십시오.
고객
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"])))
참고 URL : https://stackoverflow.com/questions/36788831/authenticating-socket-io-connections
반응형
'programing' 카테고리의 다른 글
Linux free는 높은 메모리 사용량을 표시하지만 top은 그렇지 않습니다. (0) | 2020.12.11 |
---|---|
Elastic Beanstalk nginx 지원 프록시 서버를 HTTP에서 HTTPS로 자동 리디렉션하려면 어떻게해야합니까? (0) | 2020.12.11 |
MacOS에서 프로세스를 종료하는 방법은 무엇입니까? (0) | 2020.12.11 |
테이블의 모든 행 삭제 (0) | 2020.12.11 |
Spark DataFrame groupBy 및 내림차순 정렬 (pyspark) (0) | 2020.12.10 |