WebSocket 认证

Websocket连接首次是使用的Http协议,但是浏览器的websocket客户端没有提供设置headers的方法,所以只能采用queryString带上token的方法。

    const socket = new WebSocket('ws://localhost:8090?token=sdfgdfshdfsh');

服务器端通过获取url上的token值来检验是否合法。 这里服务端采用的是ws库,没有使用socket.io。ws库参数提供了校验客户端的方法:

const options = {
    host: 'localhost',
    port: process.env.SERVER_PORT,
    verifyClient: (info, callback) => {
        const path = new URL.URL('http://localhost' + info.req.url);
        const params = new URL.URLSearchParams( path.search);
        const token = params.get('token');
        if (!token) {  //更具实际业务需求判断
            callback(false, 401, 'Unauthorized');
        } else {
            callback(true);
        }
    },
};

const wss = new WebSocket.Server(options);