如何在node js中使用ws库为web sockets启用CORS?

qaxu7uf2  于 2023-08-04  发布在  Node.js
关注(0)|答案(2)|浏览(88)

我对node js和web sockets还不熟悉。我正在尝试使用node js中的ws创建一个Web Socket。我有两个问题:
1.我确实有一个想法,CORS是不可用的网络套接字,但有没有一种方法,我仍然可以使他们?
1.如何扩展代码以实现客户端身份验证?目前,我可以使用“wss”,但我想使用证书验证客户端。我怎么能这么做呢?
Server.js代码

const { WebSocketServer } = require('ws');
const { createServer } = require('https');
const { readFileSync } = require('fs');

function startServer() {

 const server = createServer({
   cert: readFileSync('server_cert.pem'),
   key: readFileSync('server_key.pem'),
 });
const wss = new WebSocketServer({ noServer: true });

server.on('upgrade', (request, socket, head) => {
  authenticate(request, (err, client) => {
  if (err || !client) {
    socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
    socket.destroy();
    return;
  }

  wss.handleUpgrade(request, socket, head, (ws) => {
    wss.emit('connection', ws, request, client);
   });
  });
});
server.listen(7070);
}

字符串
有人能给我指路吗?

k5hmc34c

k5hmc34c1#

我使用以下服务器端代码实现了CORS验证和基于证书的客户端身份验证:

const server = createServer({
  cert: readFileSync(config.certs.sslCertPath),
  key: readFileSync(config.certs.sslKeyPath),
  ca: [readFileSync(config.certs.caCertPath)],
  requestCert: true,
});
const wss = new WebSocketServer({ noServer: true });

server.on('upgrade', (request, socket, head) => {
  const origin = request && request.headers && request.headers.origin;
  const corsRegex = /^https?:\/\/(.*\.?)abc\.com(:\d+)?\/$/g
  if (origin && origin.match(corsRegex) != null) {
    wss.handleUpgrade(request, socket, head, (ws) => {
      wss.emit('connection', ws, request);
    });
  } else {
    socket.destroy();
  }
});

字符串

ogq8wdun

ogq8wdun2#

我想你已经研究过这个主题了,但也许其他人会发现这个帖子。正如Tomalak多次提到的,CORS不会影响WebSockets通信。在这里你可以找到一篇优秀的文章,它彻底解释了CORS是如何工作的,以及为什么它不会影响WebSockets:
https://dev.to/pssingh21/websockets-bypassing-sop-cors-5ajm
干杯!

相关问题