Websocket握手,JWT理解安全性

时间:2015-09-22 22:09:28

标签: node.js security websocket jwt handshaking

您好,我想了解这次握手是如何运作的,以及JWT。所以我有一些东西作为网页,一些用户可以去登录自己。然后我创建了一个JWT,所以当我向服务器请求时,我使用此令牌来验证用户。我想创建和websoket连接并使用此令牌。所以我像这样做了服务器

var server = app.listen(3000, function(){
    console.log('Server listening on', 3000);
});
require('./websockets').connect(server);

在那个文件websockets.js我有

var _  = require('lodash')
var ws = require('ws')
var url = require('url')
var jwt = require('jwt-simple')
var config = require('./config')
var clients = [];

exports.connect = function(server){

    var wss = new ws.Server({server:server});
        wss.on('connection', function(ws){

            var location = url.parse(ws.upgradeReq.url, true);
            var token = location.query.token;

            console.log( ws.upgradeReq.headers );

            console.log( 'New connection.' );
            try {
                var user = jwt.decode( token, config.secret );
            }catch (err) {
                ws.close()
            }

            clients[token] = ws

            ws.on('message', function(data, flags) {

                console.log( ws.upgradeReq.headers );

                console.log( data )
            });

            ws.on('close', function(){
                _.remove(clients, token)
                if( user ){
                    console.log('User disconnect:' + user.username);
                }else{
                    console.log( 'Authentication failed.' );
                }
            })

    })

}

所以问题是,如果我登录broswer并复制标题中的那个令牌。我可以使用wscat连接到不同终端的服务器。所以我试图理解握手是如何工作的,这可以帮助我预备这个。

所以我的想法是将此表格改为标题MTMtMTQ0Mjk1OTI3NjY1NA==

 connection: 'Upgrade',
  upgrade: 'websocket',
  host: 'localhost:3000',
  'sec-websocket-version': '13',
  'sec-websocket-key': 'MTMtMTQ0Mjk1OTI3NjY1NA==',
  'sec-websocket-extensions': 'permessage-deflate; client_max_window_bits' 

将它添加到客户端,并在客户端的每个调用中添加以检查该值是否相同,但不确定是否正确。我不能很好地理解它,所以如果有人可以解释这个很好,或者如果我没有ssl连接,我可以用它来防止这种劫持。

0 个答案:

没有答案