如何在套接字升级事件上使用异步函数来验证节点/ws中的Web套接字连接

问题描述 投票:0回答:1

我正在尝试使用此解决方案来验证 WebSocket 连接 (

server.on('upgrade',...
):

https://www.npmjs.com/package/ws#user-content-client-authentication

但我需要使用异步函数来根据外部身份验证服务检查令牌。我遇到的情况是,在身份验证之前,会触发

ws.on('message',...
事件并将消息发送到浏览器。

有谁知道如何解决这个问题吗?

export function initWebSocketServer( server: http.Server ) {
  wss = new WebSocket.Server({ server: server });
  wss.on('connection', connectWebSocket);

  server.on('upgrade', async function upgrade(request, socket, head) {
    socket.on('error', onSocketError);

    let res = await authenticateWebSocket(request);

    if (res === false) {
      logger.info('authenticateWebSocket > 401 Unauthorized');
      socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
      socket.destroy();
      return;
    }

    socket.removeListener('error', onSocketError);
    
    wss.handleUpgrade(request, socket, head, function done(ws) {
      wss.emit('connection', ws, request);
    });

  });  
}

function connectWebSocket(ws: WebSocket) {
  ...
  ws.on('message', (message: string) => {
    messageReceiveWebSocket( message, ws )
  });
  ...
}

Messages when a WebSocket connection is established

node.js authentication sockets websocket ws
1个回答
0
投票

最终我使用函数

verifyClient
解决了这个问题,即使在npm文档中不鼓励使用它(Issue#337)。只有这对我来说适用于异步身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.