WebSocket 即时通讯前后端设计和基于token的鉴权

我的项目中使用的websocket 即时通讯一直没有加权限验证功能,就是简单的连接后发消息,但是最近面试的时候有人问我websocket如何鉴权,现在把这个漏洞补上

这是后端代码 go语言

路由代码

go 复制代码
defaultRoutes.GET("/ws", func(ctx *gin.Context) {
        t := ctx.Query("token")
        token, _, err := middlewares.ParseToken(t)
        if err != nil || !token.Valid {
                ctx.JSON(400, gin.H{
                        "message": "token无效",
                })
        } else {
                controllers.UserController{}.WS(ctx.Writer, ctx.Request)
        }

})

websocket连接

go 复制代码
var upgrader = websocket.Upgrader{
    CheckOrigin: func(r *http.Request) bool {
            return true
    },
}
var conns []*websocket.Conn
go 复制代码
func (this UserController) WS(w http.ResponseWriter, r *http.Request) {
    c, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
            println("upgrade错误:", err)
            return
    }
    defer c.Close()
    conns = append(conns, c)
    for {
            _, _, err := c.ReadMessage()
            if err != nil {
                    println("read:", err)
                    break
            }
    }
}
下面是前端代码
ini 复制代码
let token=sessionStorage.getItem("token")
const env = process.env.NODE_ENV
//token加载url里个人感觉最合适的方案
const url = env == 'development' ? "ws://localhost:8088/ws?token=" + token : "ws://114.116.249.103:8088/ws?token=" + token
const websocket = new WebSocket(url)
let socketState = ref(true)
websocket.onopen = (evt) => {
  console.log("链接成功")
  socketState.value = true
}
websocket.onmessage = (evt) => {
    //这里是判断消息类型,自定义功能
  if (evt.data == "xxx1") {
    refreshChartJL()
  } else if (evt.data == "xxx2") {
    refreshChartMusic()
  }
}
websocket.onclose = () => {
  console.log("链接关闭")
  socketState.value = false
}
相关推荐
郭老二6 小时前
【前端】vue3:编译步骤
前端
不在逃避q7 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
mldong7 小时前
从 mldong 到 jeeflow:一个工作流引擎的独立进化
后端
夏殇之殁7 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One9857 小时前
高进度算法模板速记(待完善)
java·前端·算法
陈随易7 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
Aaron - Wistron8 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
卷无止境8 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境8 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
新中地GIS开发老师8 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发