websocket携带jwt token
在websocket中,目前未提供修改请求头字段的方法,不过可以借助于“Sec-WebSocket-Protocol”,将token放入请求头中,后端收到请求后,从请求头中取得token做校验。
即:在前端websocket中放入token
let token=localStorage.getItem("token")
this.socket = new WebSocket(terminalWsUrl,[token]);//在webscoket中放入token
后端接收到请求后,从header中取出“Sec-WebSocket-Protocol”,做校验
token = context.Request.Header.Get("Sec-WebSocket-Protocol")
if len(token) == 0 {
ResponseError(context, 11000, errors.New("请求未携带token,无权限访问"))
context.Abort()
return
}
另外需要注意的是,在响应头上添加Sec-Websocket-Protocol,如下是在grilla/websocket响应中设置Sec-Websocket-Protocol的方式
var upgrader = func(r *http.Request) *websocket.Upgrader {
upgrader := &websocket.Upgrader{}
upgrader.HandshakeTimeout = time.Second * 2
upgrader.CheckOrigin = func(r *http.Request) bool {
return true
}
upgrader.Subprotocols = []string{r.Header.Get("Sec-Websocket-Protocol")} //设置Sec-Websocket-Protocol
return upgrader
}
多数时候,浏览器出现下面异常提示信息,就是因为响应报文头中没有Sec-Websocket-Protocol导致的
WebSocket: Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was receivedWebSocket:WebSocket
引用链接:
(1)https://blog.csdn.net/weixin_43277309/article/details/123129650
(2)https://www.jianshu.com/p/7b1deb1e0a07?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了