前后端通過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愉快的通信了。
完。