Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在将连接升级到websocket之前通过JWT对用户进行身份验证_Javascript_Node.js_Websocket_Jwt - Fatal编程技术网

Javascript 在将连接升级到websocket之前通过JWT对用户进行身份验证

Javascript 在将连接升级到websocket之前通过JWT对用户进行身份验证,javascript,node.js,websocket,jwt,Javascript,Node.js,Websocket,Jwt,我在服务器上使用的是NodeV8.6.0。我不会使用Socket.io 我希望用户通过GET请求发送一个JWT(即通过自定义头),该请求将被拒绝(他们未经授权)并阻止建立websocket,或者,如果他们发送有效的JWT,我希望GET请求升级到websocket axios.get('http://localhost:3001/upgrade', { headers: { Authorization: 'bearer jwtGoesHere', Upgra

我在服务器上使用的是NodeV8.6.0。我不会使用Socket.io

我希望用户通过GET请求发送一个JWT(即通过自定义头),该请求将被拒绝(他们未经授权)并阻止建立websocket,或者,如果他们发送有效的JWT,我希望GET请求升级到websocket

axios.get('http://localhost:3001/upgrade', {
    headers: {
        Authorization: 'bearer jwtGoesHere',
        Upgrade: 'websocket',
        Connection: 'Upgrade',
        'Sec-WebSocket-Key': 'dGhlIHNhbXBsZSBub25jZQ==',
        'Sec-WebSocket-Version': 13
    }
})
但是,无法发送自定义头。如果我试图发送升级到websocket所需的标题,我会收到一个错误:
拒绝设置不安全的标题
。环顾web,我发现在尝试建立websocket连接时,可能有两种方法可以通过发送某种信息:和。然而,在我看来,它们似乎有点黑客化,或者至少是非标准的解决方案(通过这种方式发送JWT可以吗?)

目前,这是我的代码在服务器上的外观(使用TypeScript):

在客户端,我只是使用原生WebSocket

    const webSockets: any = {};
    const webSocketServer: any = new WebSocket.Server({ noServer: true });
    server.on('upgrade', (request: any, socket: any, head: any) => {
        webSocketServer.handleUpgrade(request, socket, head, (websocket: any) => {
            let userID: any;
            console.log('establishing websocket connection...');
            websocket.send('plz send ID');
            websocket.on('message', (message: any): any => {
                if (JSON.parse(message).userId) {
                    userID = JSON.parse(message).userId;
                    if (!webSockets[userID]) {
                        console.log('preparing websocket user...');
                        webSockets[userID] = websocket;
                    }
                    console.log(`connected: ${userID}`);
                }
            });

            websocket.on('close', (eventCode: any): any => {
                if (eventCode === 1006) {
                    console.log('Websocket disconnected abnormally');
                }
                if (eventCode === 1000) {
                    console.log('Websocket successfully closed normally');
                    delete webSockets[userID];
                    console.log(`deleted: ${userID}`);
                }
            });
        });
    });