记一次websocket连接时,前后端使用token鉴权,导致连接失败的原因

前后端通过websocket通信,但是需要鉴权,可以利用websocket的子协议来传输token,代码如下:

var ws = new WebSocket("ws://localhost/ws",[token]);

在后面加上[这里是token内容]。这样请求头就会携带:

Sec-WebSocket-Protocol:token value

参数是一个数组。如果数组有多个值,后端也会接受到逗号隔开的值。

后端可以获取这个token进行鉴权。

重点来了!

如果传递了token参数,后端响应的时候,也必须带上这个token响应!否则前端接收不到数据!

而后端的websocket如果在header里携带token呢?这里给出golang 的写法:

var upgrader = websocket.Upgrader{
        Subprotocols: []string{r.Header.Get("Sec-WebSocket-Protocol")},
}        

通过这样设置,前后端就可以携带token愉快的通信了。

完。

posted @ 2020-04-27 17:30  alpiny  阅读(11363)  评论(0编辑  收藏  举报