WebSocket 客户端在建立连接时可以自定义 HTTP 头部,以便添加如 token 之类的认证信息。不过,具体的实现方式取决于你所使用的客户端环境(例如,浏览器还是 Node.js)。
浏览器环境
在浏览器中,由于安全限制,无法直接修改 WebSocket 握手时的 HTTP 头部。但你仍有几种方法可以传递认证信息:
通过查询参数传递 Token
你可以在 WebSocket 的 URL 中添加查询参数来传递 token。例如:
const token = "your_token_here"; const ws = new WebSocket(`wss://yourserver.com/socket?token=${token}`);服务器端接收到连接请求后,可以从查询参数中提取 token 进行验证。
使用子协议(Subprotocols)
有些情况下,可以利用 WebSocket 的子协议传递认证信息:
const token = "your_token_here"; const ws = new WebSocket("wss://yourserver.com/socket", token);服务器端可以在握手时读取子协议信息来验证 token。
通过 Cookie 传递
如果 token 已存储在 Cookie 中,并且 WebSocket 连接与相同的域名相关联,Cookie 会自动包含在握手请求中:
// 确保 token 存在于 Cookie 中 document.cookie = `token=${token}; path=/`; const ws = new WebSocket("wss://yourserver.com/socket");
Node.js 环境
在 Node.js 中,你可以使用诸如 ws 的 WebSocket 库,并且可以轻松地自定义握手请求的头部:
const 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 库的服务器端示例:
const 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内容请搜索靠谱客的其他文章。
发表评论 取消回复