[B-11][high] 令牌"30 天没用"按最后一次认证时间算,一直在线的设备重连会被判失效 #18

Closed
opened 2026-09-30 13:56:54 +08:00 by nixevol · 1 comment
Owner

编号:B-11 严重级:high 工作线:broker(internal/broker) 来源:审查 I-06
依赖:无(依赖消息线维护的上下线字段,B-09 (#16) 后仍由消息线写) 被依赖:无

结论与统一方案

采用审查 I-06 的方案:判断闲置时取 max(session_used_at, 内存 usedAt, 不早于签发时间的 online_since / offline_since),当前在线(online_since > offline_since)直接视为在用。启动恢复会把停机前在线端的 offline_since 设为启动时间,重启后的大批重连自然算"刚用过"。按小时落库失败降级为只记日志,不让 CONNECT 失败。

语义以 PRD F02 / D29"没用过"为准:在线即在用。否则常电设备、接入方后台连续在线满 30 天后第一次重连会被 0x86 拒绝,SDK 以会话失效停止重连;服务运行满 30 天后重启时这类设备会同时被登出。

改动文件

internal/broker/authn.go。

与其他问题的交互 / 冲突说明

与 B-10 同文件不同函数,按 broker 线顺序合入。

验收与测试

  • t0 登录、一直在线到 t0+31 天断开,令牌重连成功。
  • t0+1 天断开、t0+32 天重连被拒。
  • 执行启动恢复后重连成功。
  • used_at 落库失败时 CONNECT 仍成功。

问题明细(各区审查原文,证据含文件与行号)

以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。解决方案以本 issue 上方的"结论与统一方案"为准;原文里的方案与之不一致时,按上方执行。

[I-06] 「30 天没用」按最后一次认证时间算,一直在线的设备重连会被判失效

  • 严重级:high
  • 分类:与PRD不符
  • 现象与影响
    • session_used_at 只在令牌认证或密码登录时刷新,连接在线期间不刷新。
    • 连续在线超过 30 天的设备(常电的 IoT 设备、接入方后台)第一次重连时会被 0x86 拒绝,SDK 以「会话已失效」停止重连。PRD 推荐应用只存令牌,这类设备就此离线。
    • 服务器运行超过 30 天后重启或升级,这类设备会同时被登出,和 DEVELOPMENT「服务器重启后的大批重连也基本走令牌」相反。
    • 附带问题:按小时落库失败时,touchSessionUsed 返回错误,会让整个 CONNECT 失败。
  • 证据
    • 闲置判断:broker/authn.go:147-173。
    • 只在令牌认证时刷新:broker/authn.go:175-192。
    • 全仓只有这里和密码登录、改密会写 session_used_at。
  • 文档依据:PRD F02(150)「令牌 30 天没用过自动失效」、D29;DEVELOPMENT 第 5 节(281)。
  • 为何不是故意设计:DEVELOPMENT 只写了「认证时刷新」,没有讨论在线期间怎么算。按 PRD「没用过」的语义,在线就是在用。
  • 解决方案
    • loadEndpoint 多读 session_issued_at、online_since、offline_since。
    • 最后使用时间取 max(session_used_at, 内存 usedAt, 不早于签发时间的 online_since/offline_since);当前在线(online_since > offline_since)直接视为在用。
    • 断线时 offline_since 本来就会写入;启动恢复会把停机前在线端的 offline_since 设为启动时间,所以重启后的重连自然算「刚用过」。
    • 落库失败降级为只记日志。
  • 改动文件:broker/authn.go。
  • 与其他模块的交互/冲突风险:依赖消息线维护的上下线字段。I-4 造成的假在线只会让判断偏宽,不会误拒。
  • 需补测试
    • t0 登录,一直在线到 t0+31 天断开,令牌重连成功。
    • t0+1 天断开,t0+32 天重连被拒。
    • 执行启动恢复后重连成功。
  • 置信度:代码阅读确定,语义以 PRD 为准。

复审基线:main 4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。

**编号**:B-11 **严重级**:high **工作线**:broker(internal/broker) **来源**:审查 I-06 **依赖**:无(依赖消息线维护的上下线字段,B-09 (#16) 后仍由消息线写) **被依赖**:无 ### 结论与统一方案 采用审查 I-06 的方案:判断闲置时取 `max(session_used_at, 内存 usedAt, 不早于签发时间的 online_since / offline_since)`,当前在线(online_since > offline_since)直接视为在用。启动恢复会把停机前在线端的 offline_since 设为启动时间,重启后的大批重连自然算"刚用过"。按小时落库失败降级为只记日志,不让 CONNECT 失败。 语义以 PRD F02 / D29"没用过"为准:在线即在用。否则常电设备、接入方后台连续在线满 30 天后第一次重连会被 0x86 拒绝,SDK 以会话失效停止重连;服务运行满 30 天后重启时这类设备会同时被登出。 ### 改动文件 `internal/broker/authn.go`。 ### 与其他问题的交互 / 冲突说明 与 B-10 同文件不同函数,按 broker 线顺序合入。 ### 验收与测试 - t0 登录、一直在线到 t0+31 天断开,令牌重连成功。 - t0+1 天断开、t0+32 天重连被拒。 - 执行启动恢复后重连成功。 - used_at 落库失败时 CONNECT 仍成功。 --- ### 问题明细(各区审查原文,证据含文件与行号) > 以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。**解决方案以本 issue 上方的"结论与统一方案"为准**;原文里的方案与之不一致时,按上方执行。 #### [I-06] 「30 天没用」按最后一次认证时间算,一直在线的设备重连会被判失效 - **严重级**:high - **分类**:与PRD不符 - **现象与影响** - `session_used_at` 只在令牌认证或密码登录时刷新,连接在线期间不刷新。 - 连续在线超过 30 天的设备(常电的 IoT 设备、接入方后台)第一次重连时会被 0x86 拒绝,SDK 以「会话已失效」停止重连。PRD 推荐应用只存令牌,这类设备就此离线。 - 服务器运行超过 30 天后重启或升级,这类设备会同时被登出,和 DEVELOPMENT「服务器重启后的大批重连也基本走令牌」相反。 - 附带问题:按小时落库失败时,`touchSessionUsed` 返回错误,会让整个 CONNECT 失败。 - **证据** - 闲置判断:`broker/authn.go:147-173`。 - 只在令牌认证时刷新:`broker/authn.go:175-192`。 - 全仓只有这里和密码登录、改密会写 `session_used_at`。 - **文档依据**:PRD F02(150)「令牌 30 天没用过自动失效」、D29;DEVELOPMENT 第 5 节(281)。 - **为何不是故意设计**:DEVELOPMENT 只写了「认证时刷新」,没有讨论在线期间怎么算。按 PRD「没用过」的语义,在线就是在用。 - **解决方案** - `loadEndpoint` 多读 `session_issued_at`、`online_since`、`offline_since`。 - 最后使用时间取 `max(session_used_at, 内存 usedAt, 不早于签发时间的 online_since/offline_since)`;当前在线(`online_since > offline_since`)直接视为在用。 - 断线时 offline_since 本来就会写入;启动恢复会把停机前在线端的 offline_since 设为启动时间,所以重启后的重连自然算「刚用过」。 - 落库失败降级为只记日志。 - **改动文件**:`broker/authn.go`。 - **与其他模块的交互/冲突风险**:依赖消息线维护的上下线字段。I-4 造成的假在线只会让判断偏宽,不会误拒。 - **需补测试** - t0 登录,一直在线到 t0+31 天断开,令牌重连成功。 - t0+1 天断开,t0+32 天重连被拒。 - 执行启动恢复后重连成功。 - **置信度**:代码阅读确定,语义以 PRD 为准。 --- <sub>复审基线:main `4059a15`(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。</sub>
nixevol added the P1-highlane/brokerreview-2026-09-30 labels 2026-09-30 13:56:54 +08:00
Author
Owner

已合入 origin/main 0c9b459。落地提交 91e887b fix: 完成 broker 复审 B-03 至 B-12 (#18)。

已合入 origin/main `0c9b459`。落地提交 `91e887b` fix: 完成 broker 复审 B-03 至 B-12 (#18)。
Sign in to join this conversation.