WebSocket 客户端在建立连接时可以自定义 HTTP 头部,以便添加如 token 之类的认证信息。不过,具体的实现方式取决于你所使用的客户端环境(例如,浏览器还是 Node.js)。
浏览器环境
在浏览器中,由于安全限制,无法直接修改 WebSocket 握手时的 HTTP 头部。但你仍有几种方法可以传递认证信息:
通过查询参数传递 Token
你可以在 WebSocket 的 URL 中添加查询参数来传递 token。例如:
复制代码1
2const token = "your_token_here"; const ws = new WebSocket(`wss://yourserver.com/socket?token=${token}`);服务器端接收到连接请求后,可以从查询参数中提取 token 进行验证。
使用子协议(Subprotocols)
有些情况下,可以利用 WebSocket 的子协议传递认证信息:
复制代码1
2const token = "your_token_here"; const ws = new WebSocket("wss://yourserver.com/socket", token);服务器端可以在握手时读取子协议信息来验证 token。
通过 Cookie 传递
如果 token 已存储在 Cookie 中,并且 WebSocket 连接与相同的域名相关联,Cookie 会自动包含在握手请求中:
复制代码1
2
3
4// 确保 token 存在于 Cookie 中 document.cookie = `token=${token}; path=/`; const ws = new WebSocket("wss://yourserver.com/socket");
Node.js 环境
在 Node.js 中,你可以使用诸如 ws
的 WebSocket 库,并且可以轻松地自定义握手请求的头部:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18const WebSocket = require('ws'); const token = "your_token_here"; const ws = new WebSocket('wss://yourserver.com/socket', { headers: { Authorization: `Bearer ${token}`, // 你可以添加更多自定义头部 } }); ws.on('open', function open() { console.log('连接已建立'); }); ws.on('message', function incoming(data) { console.log('收到消息:', data); });
在这个示例中,我们在握手请求中添加了 Authorization
头部,服务器可以读取这个头部来进行认证。
服务器端处理
无论你使用哪种方式传递 token,服务器端需要相应地解析和验证 token。例如,使用 Node.js 和 ws
库的服务器端示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28const WebSocket = require('ws'); const url = require('url'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', function connection(ws, request) { // 从查询参数中提取 token const parameters = url.parse(request.url, true); const token = parameters.query.token; // 或者从头部中提取 Authorization // const token = request.headers['authorization']; if (validateToken(token)) { ws.send('认证成功'); } else { ws.close(1008, '认证失败'); // 1008 表示策略违反 } ws.on('message', function incoming(message) { console.log('收到消息:', message); }); }); function validateToken(token) { // 实现你的 token 验证逻辑 return token === "your_token_here"; }
总结
浏览器客户端:无法直接修改握手头部,但可以通过查询参数、子协议或 Cookie 传递 token。
非浏览器客户端(如 Node.js):可以自定义握手头部,添加所需的认证信息。
根据你的具体需求和环境选择合适的方法来传递和验证 token。
最后
以上就是名字长了才好记最近收集整理的关于websocket 客户端在建立连接的时候自定义token的全部内容,更多相关websocket内容请搜索靠谱客的其他文章。
发表评论 取消回复