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

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

浏览器环境

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

  1. 通过查询参数传递 Token

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

    const token = "your_token_here";
    const ws = new WebSocket(`wss://yourserver.com/socket?token=${token}`);

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

  2. 使用子协议(Subprotocols)

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

    const token = "your_token_here";
    const ws = new WebSocket("wss://yourserver.com/socket", token);

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

  3. 通过 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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部