Websocket握手,JWT了解安全

嗨,我试图了解这个握手如何工作和智威汤逊。 所以我有一些网页的东西,一些用户可以去login自己。 然后我创build一个JWT,所以当我向服务器请求时,我使用这个令牌来validation用户。 我想创build和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.' ); } }) }) } 

所以问题是,如果我login在浏览器中,我复制标题中的标记。 我可以用不同的terminal使用wscat连接到服务器。 所以我试图了解这个握手是如何工作的,这可以帮助我预见到这一点。

所以我的想法是得到这种forms的头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连接的话。