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

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

谢谢大家的指导,解决了

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 20

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

3年前 评论
sanders

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

3年前 评论
小滕

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

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

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

3年前 评论

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

3年前 评论

你的方法没问题的

3年前 评论

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

3年前 评论

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

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

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

3年前 评论

携带到url

3年前 评论
CrazyZard

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

8个月前 评论

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