我是靠谱客的博主 名字长了才好记,这篇文章主要介绍websocket 客户端在建立连接的时候自定义token,现在分享给大家,希望可以做个参考。

WebSocket 客户端在建立连接时可以自定义 HTTP 头部,以便添加如 token 之类的认证信息。不过,具体的实现方式取决于你所使用的客户端环境(例如,浏览器还是 Node.js)。

浏览器环境

在浏览器中,由于安全限制,无法直接修改 WebSocket 握手时的 HTTP 头部。但你仍有几种方法可以传递认证信息:

  1. 通过查询参数传递 Token

    你可以在 WebSocket 的 URL 中添加查询参数来传递 token。例如:

    复制代码
    1
    2
    const token = "your_token_here"; const ws = new WebSocket(`wss://yourserver.com/socket?token=${token}`);

    服务器端接收到连接请求后,可以从查询参数中提取 token 进行验证。

  2. 使用子协议(Subprotocols)

    有些情况下,可以利用 WebSocket 的子协议传递认证信息:

    复制代码
    1
    2
    const token = "your_token_here"; const ws = new WebSocket("wss://yourserver.com/socket", token);

    服务器端可以在握手时读取子协议信息来验证 token。

  3. 通过 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
18
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 库的服务器端示例:

复制代码
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
28
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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部