token设定一个验证算法,GatewayWorker自己验证就行,用不着再请求一遍tp
我的token是保存在业务数据库中,并且有时效的
你说用JWT?
jwt也行
如果是一些复杂的鉴权逻辑呢?
复杂的不走数据库都可以直接GatewayWorker里做吧
有一些场景需要业务系统进行鉴权比较合适,比如用户付费聊天?如果鉴权逻辑放在聊天系统,聊天系统会不会有点臃肿啊?
后续别的系统连接聊天系统不好管理把?
业务都走tp啊,GatewayWorker只做发送消息
每次收发聊天消息都要经过web吗?还是直连聊天系统?
业务都走web,gatewayWorker只做消息发送
不做客户端消息接收?
好像理解你的意思了,跟文档思想一样
结合webman pusher服务就行了,消息处理端不需要跟数据库产生任何连接,仅作数据推送
我没有使用webman,业务系统用的是tp框架
聊天系统只负责消息收发?不干其他事
我的设计是:uniapp连接GatewayWorker时,GatewayWorker返回验证信息【auth、client_id、timestamp】,设置未绑定超时关闭; uniapp请求头携带token,数据报文为上一步的验证信息,请求thinkPHP业务系统;
thinkPHP业务系统,在鉴权成功后,通过GatewayClient绑定用户id、加入分组、关闭连接等等操作。
GatewayWorker仅作为推送通道。
源码在此:https://github.com/ledccn/workerman-process/blob/master/src/Events.php
意思是GatewayWorker拿到token做鉴权?
GatewayWorker返回验证信息【auth、client_id、timestamp】,auth是什么?
在源码里面有,只是生成一个唯一的 值。 防止客户端伪造client_id。
auth的意义其实是签名,表示在时间戳timestamp,有client_id进行连接; 相当于Session的概念。 thinkphp业务系统,在做绑定uid或者加入分组时,一定要验证这个auth值。
🆗了解,thinkphp加入auth验证
不知GatewayWorker如何获取auth
/** * 将client_id与uid绑定 * @param string $client_id * @param string $uid * @param string $auth * @return void * @throws Exception */ public static function bindUid(string $client_id, string $uid, string $auth): bool { if (empty($auth) || strlen($auth) < 32) { throw new Exception('auth验证参数为空'); } $session = Gateway::getSession($client_id); $_auth = $session['auth'] ?? $session['uniqid'] ?? ''; if (empty($_auth)) { throw new Exception('session验证参数为空'); } if (hash_equals($auth, $_auth)) { Gateway::bindUid($client_id, $uid); return true; } return false; }
业务系统,鉴权通过后绑定uid时,一定要验证接口收到的auth和GatewayWorker系统内Session是否相同。
你的消息收发是直连吗?
这个看你需求,反正是GatewayWorker绝不做鉴权的操作。
鉴权,绑定uid,消息存储等,都在业务系统中实现
GatewayWorker仅做消息收发功能
学习了👍
一起学习把
token设定一个验证算法,GatewayWorker自己验证就行,用不着再请求一遍tp
我的token是保存在业务数据库中,并且有时效的
你说用JWT?
jwt也行
如果是一些复杂的鉴权逻辑呢?
复杂的不走数据库都可以直接GatewayWorker里做吧
有一些场景需要业务系统进行鉴权比较合适,比如用户付费聊天?如果鉴权逻辑放在聊天系统,聊天系统会不会有点臃肿啊?
后续别的系统连接聊天系统不好管理把?
业务都走tp啊,GatewayWorker只做发送消息
每次收发聊天消息都要经过web吗?还是直连聊天系统?
业务都走web,gatewayWorker只做消息发送
不做客户端消息接收?
好像理解你的意思了,跟文档思想一样
结合webman pusher服务就行了,消息处理端不需要跟数据库产生任何连接,仅作数据推送
我没有使用webman,业务系统用的是tp框架
聊天系统只负责消息收发?不干其他事
我的设计是:uniapp连接GatewayWorker时,GatewayWorker返回验证信息【auth、client_id、timestamp】,设置未绑定超时关闭;
uniapp请求头携带token,数据报文为上一步的验证信息,请求thinkPHP业务系统;
thinkPHP业务系统,在鉴权成功后,通过GatewayClient绑定用户id、加入分组、关闭连接等等操作。
GatewayWorker仅作为推送通道。
源码在此:https://github.com/ledccn/workerman-process/blob/master/src/Events.php
意思是GatewayWorker拿到token做鉴权?
GatewayWorker返回验证信息【auth、client_id、timestamp】,auth是什么?
在源码里面有,只是生成一个唯一的 值。
防止客户端伪造client_id。
auth的意义其实是签名,表示在时间戳timestamp,有client_id进行连接;
相当于Session的概念。
thinkphp业务系统,在做绑定uid或者加入分组时,一定要验证这个auth值。
🆗了解,thinkphp加入auth验证
不知GatewayWorker如何获取auth
业务系统,鉴权通过后绑定uid时,一定要验证接口收到的auth和GatewayWorker系统内Session是否相同。
你的消息收发是直连吗?
这个看你需求,反正是GatewayWorker绝不做鉴权的操作。
鉴权,绑定uid,消息存储等,都在业务系统中实现
GatewayWorker仅做消息收发功能
学习了👍
一起学习把