1.优化ws参数格式auth-token和user-token
This commit is contained in:
@@ -765,8 +765,8 @@
|
||||
- **混合内容**:若 H5 页面为 **HTTPS**,浏览器要求 WebSocket 使用 **`wss://`**,否则会被拦截。
|
||||
- **事件投递依赖 Redis**:HTTP 侧业务通过 **`GameWebSocketEventBus`**(Redis 列表)将事件投递到 WebSocket 进程;Redis 不可用或队列异常时,**除 `admin.live.snapshot` 外**的广播类推送可能收不到。后台若订阅了 `admin.live.snapshot`,服务端有**每秒直连构建快照**的兜底,不依赖队列。
|
||||
- **握手鉴权(2026-05 重构后强制)**:`GameWebSocketServer::onWebSocketConnect` 通过 `GameWebSocketAuthHelper::authorize` 校验 URL Query。两种合法身份:
|
||||
- **mobile(H5/移动端)**:必须同时携带 `auth_token`(同 HTTP `auth-token`)+ `user_token`(同 HTTP `user-token`,亦支持 `token` 同义)。校验通过后连接被绑定 `user_id`,分发器仅向其推送本人的 user 级主题。
|
||||
- **admin(后台/运维)**:必须携带 `admin_ws_token`(由后台 `wsConfig` 接口签发,写入 Redis Key `dfw:v1:ws:admin_token:{token}`,默认 TTL 7200s)。后台已 `wsConfig` 中把该 token 拼到 `ws_url` 一并返回,前端透传即可;admin 模式 `user_id=0`,可订阅任意主题并收到**全量** user 级推送(运维联调用)。
|
||||
- **mobile(H5/移动端)**:必须同时携带 Query **`auth-token`**、**`user-token`**(与 HTTP 请求头同名,**统一用连字符**)。校验通过后绑定 `user_id`,分发器仅向其推送本人的 user 级主题。服务端仍兼容旧别名 `auth_token` / `user_token` 解析,但**新接入请只用连字符**。
|
||||
- **admin(后台/运维)**:必须携带 Query **`admin-ws-token`**(由后台 `wsConfig` 签发,写入 Redis,默认 TTL 7200s)。`ws_url` 已自动拼接该参数;admin 模式 `user_id=0`,可观测全量推送。
|
||||
- 任一身份不通过 → 服务端发送 `{"event":"ws.error","code":1101,"message":"Authentication failed: ..."}` 并立即 `close`。
|
||||
- **服务端按 user_id 过滤(user 级主题)**:以下 topic 的 `data.user_id` 必须 **等于** 当前连接绑定的 `user_id` 才会下发——**`bet.win` / `user.streak` / `wallet.changed` / `bet.accepted` / `auto.spin.progress`**。其它 topic(`period.tick` / `period.opened` / `jackpot.hit` / `admin.*` 等)按订阅广播。admin 模式不参与此过滤。
|
||||
- **心跳超时(服务端主动)**:连接 60s 内无任何上行报文(含 `ping`/`subscribe`)即被 server 主动 `close`,触发客户端走重连流程;避免半关闭的僵尸连接长期持有订阅却不能实际送达推送。
|
||||
@@ -778,11 +778,11 @@
|
||||
- **连接地址**:见 **§7.0**(环境变量 `H5_WEBSOCKET_URL` 或后台 `wsConfig` 返回的 `ws_url`)
|
||||
- **客户端**:浏览器原生 `WebSocket`(`ws://` / `wss://`)
|
||||
- **连接时必带 Query 参数(2026-05 起强制)**:
|
||||
- **H5/移动端**:`auth_token=<HTTP auth-token>` + `user_token=<HTTP user-token>`(亦支持 `token` 同义)。`device_id`、`lang` 仍可携带,但服务端不强制。
|
||||
- **后台**:`admin_ws_token=<wsConfig 返回的 admin_ws_token>`(后台 `wsConfig` 已直接把它拼到 `ws_url`,前端透传即可)。
|
||||
- **H5/移动端**:`auth-token=<HTTP auth-token 的值>` + `user-token=<HTTP user-token 的值>`。可选:`device_id`、`lang`。
|
||||
- **后台**:`admin-ws-token=<wsConfig 返回的 admin-ws-token>`(已拼入 `ws_url`)。
|
||||
- 示例:
|
||||
- H5:`wss://ws.example.com/ws/?auth_token=xxx&user_token=yyy&device_id=ios_001&lang=zh`
|
||||
- 后台:`wss://ws.example.com/ws/?admin_ws_token=zzz`
|
||||
- H5:`wss://ws.example.com/ws/?auth-token=xxx&user-token=yyy&device_id=ios_001&lang=zh`
|
||||
- 后台:`wss://ws.example.com/ws/?admin-ws-token=zzz`
|
||||
- 缺失任一必填字段或 token 失效 → 服务端回 `{"event":"ws.error","code":1101,...}` 后立即关闭连接。
|
||||
- **连接成功首帧(当前实现)**:
|
||||
- `event`:`ws.connected`
|
||||
|
||||
Reference in New Issue
Block a user