websocket 建立连接时如何进行授权?

我用Laravel + swoole + Laravel-s
搭了个弹幕的,但我只希望能给我授权过的用户,连接该websocket,我该怎么授权
我现在做法是拿了用户的登录Token做验证
有什么比较好的方法,或者标准的方法吗?

谢谢大家的指导,解决了

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 20

一般都是 ws 连上后客户端发 hello 消息然后带上鉴权信息, 服务端收到开始鉴权

3年前 评论
小滕

ws的授权方式有很多,首先,你得了解ws协议的具体内容。这里说两种:

第一种方式,URL参数,ws的连接URL中可以携带如:?token=xxx这样的方式,然后在ws的服务器获取这个token来验证是否建立这个连接

第二种方式,cookie,ws的连接是可以携带客户端的cookie的。

3年前 评论

我有个项目目前用的 swoole 的 自定义 onHandShake,验证客服端 cookie携带的 参数 是否符合要求,否则直接拒绝链接,而不是在onOpen里面,onopen 是已经链接成功后了的操作。

3年前 评论

url 上记得可以带参数,我搞过这样的demo

var webSocket = new WebSocket("ws://127.0.0.1:9502?user_id=" + parseInt(Math.random()*1000,10)+1);
3年前 评论

两种方式吧,要么连接建立后做一次验证,后面都默认验证通过,要么就push消息每次都验证。个人认为前者更合理。

3年前 评论

许多项目我都是独立使用 workman 做 websocket 服务器,使用 GatewayWorker 能快速开发相关功能,集成到 laravel 或者 tp 等 php 常规框架一起使用,能完美解决 websocket 通讯问题,实现了聊天室、客服,包括小程序中的各种实时交互与应用相关的功能。可以看 demo(https://element.wmhello.cn)

9个月前 评论

之前做过使用EasySwoole自定义握手事件将用户token通过sec-websocket-protocol子协议携带过来做验证,可以直接将没登录用户拦截在onOpen之前,就不用主动断开连接

3年前 评论

就连的时候检查一下,连上了就不管了。

3年前 评论
CrazyZard

你可以在我的项目上二开 用户创建 跟 验证已经弄完了

3年前 评论

携带到url

3年前 评论

我的是直接把参数从url上带过来

3年前 评论

进入页面后不直接ws,使用ajax验证下用户,没问题的话再ws

3年前 评论

你的方法没问题的

3年前 评论

服务端监听 open 事件,要求客户端将 token 带过来,服务端校验成功允许连接,否则就 close

3年前 评论
sanders

如果用户登录使用 http 那么,只需要在链接的时候把 token 发过来。最好使用现成的协议,前后端都会省事。

3年前 评论

我第一次坐这东西,心里没底,不知道这样做有没有风险,所以想看看大家是怎么想的

3年前 评论

我认为你的验证流程是没有问题的,因为客户端代码总是暴露的,所以应该使用一种临时获取的、具有有效期的、传输过程是安全的东西来作为验证依据,而用你的token正好符合,如果你希望做的完美,可以增加一些合法来源检测,例如:验证来源域名是否xxx.com

3年前 评论

@修电脑的 这样没有什么用吧,应该在服务端把好关,才对

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!