【笔记】WebSocket传递Token

前言

WebSocket传递Token

方式一

前端

  • 通过GET请求参数传递token
1
const ws = new WebSocket(`ws://127.0.0.1:8080/?token=${token}`);

后端

  • 从请求参数中获取token并鉴权
1
var token string = context.Query("token")

方式二

前端

  • 通过WebSocket管道内传输token
1
2
3
4
const ws = new WebSocket(`ws://127.0.0.1:8080/`);
ws.onopen = () => {
ws.send(token);
}

后端

  • 无条件允许前端建立WebSocket连接,建立连接后再自定义鉴权判断逻辑
    • 在建立连接后标记为未鉴权,当后端需要发送数据给前端时,只给已鉴权的连接发送数据,未鉴权的连接提示需要鉴权,前端可以主动发送token给后端鉴权

方案三

前端

  • 利用WebSocket请求头中的Sec-WebSocket-Protocol参数传递token
1
const ws = new WebSocket('ws://127.0.0.1:8080/', ["<token>"]);

后端

  • 在接收到前端的请求时,从请求头中获取Sec-WebSocket-Protocol作为token鉴权
  • 鉴权通过后,在升级为WebSocket连接时,将Sec-WebSocket-Protocol作为响应头返回
1
2
3
4
var token string = context.Request.Header.Get("Sec-Websocket-Protocol")

context.Writer.Header().Set("Sec-Websocket-Protocol", token)
conn, err := wsUpgrader.Upgrade(context.Writer, context.Request, context.Writer.Header())

完成

参考文献

CSDN——写BUG的牛