我认为你的验证流程是没有问题的,因为客户端代码总是暴露的,所以应该使用一种临时获取的、具有有效期的、传输过程是安全的东西来作为验证依据,而用你的token正好符合,如果你希望做的完美,可以增加一些合法来源检测,例如:验证来源域名是否xxx.com
ws的授权方式有很多,首先,你得了解ws协议的具体内容。这里说两种:
第一种方式,URL参数,ws的连接URL中可以携带如:?token=xxx这样的方式,然后在ws的服务器获取这个token来验证是否建立这个连接
第二种方式,cookie,ws的连接是可以携带客户端的cookie的。
url 上记得可以带参数,我搞过这样的demo
var webSocket = new WebSocket("ws://127.0.0.1:9502?user_id=" + parseInt(Math.random()*1000,10)+1);
我有个项目目前用的 swoole 的 自定义 onHandShake,验证客服端 cookie携带的 参数 是否符合要求,否则直接拒绝链接,而不是在onOpen里面,onopen 是已经链接成功后了的操作。
许多项目我都是独立使用 workman 做 websocket 服务器,使用 GatewayWorker 能快速开发相关功能,集成到 laravel 或者 tp 等 php 常规框架一起使用,能完美解决 websocket 通讯问题,实现了聊天室、客服,包括小程序中的各种实时交互与应用相关的功能。可以看 demo(https://element.wmhello.cn)
推荐文章: