登录方案文档更新为全部完成并记录独立复验结论

This commit is contained in:
root
2026-09-21 11:25:49 +08:00
parent 628f3ad0a2
commit 584db277a6
+26 -5
View File
@@ -1,7 +1,10 @@
# LionWebsite 一键登录(/login):实现说明与机器人侧待办
# LionWebsite 一键登录(/login):实现说明
状态:**主站侧已实施上线**(提交 `00e2715`);机器人侧(QQ / Telegram)**待实施**。
关联待办:`todos/open-td-20260921-a1b2c3-lionwebsite-login-tg.md`。
状态:**已全部完成并上线**。主站侧提交 `00e2715`(文档 `dfb647b`、`628f3ad`),
桌面端 `9b5bc94`;机器人侧由 `debian-qq-chatgpt` 于 host-vm103-debian-qq 完成
(见共享盘 `tasks/2026-09-21-lionwebsite-login-bot-command/`)。
关联待办:`td-20260921-a1b2c3`(已归档为
`todos/archive/done-td-20260921-a1b2c3-lionwebsite-login-tg.md`)。
用户已明确选择**接法 B:共享密钥自签票据**,理由是机器人到主站的网络调用不可靠。
因此主站**不提供**任何票据签发端点,也不需要机器人侧发起 HTTP 请求——机器人本地
@@ -76,10 +79,16 @@ Shell 等价写法(`openssl`)供人工验证用:
SIG=$(printf 'v1.%s' "$STAMP" | openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $NF}')
```
### 2.2 命令接入(主人已确认的方案)
### 2.2 命令接入(已实施:复用既有 `/login`)
**复用既有 `/login`,不新建命令名;一条回复里同时给出两个登录链接。**
实现方式(vm103 实际做法,比原计划更稳):**机器人进程不持有密钥**。
签发走保险库固定动作 `CollabSecretService.use_secret`,值只交给进程内签名函数,
不返回、不落盘、不进日志;审计只记引用与动作名 `lionwebsite-login-link`。
QQ 侧 `plugins/login.py` 只经内部令牌 POST `/internal/panel-login`,
由 PersonalService 统一产出文案,因此 QQ 与 Telegram 不会漂移。
- Telegram:`telegram_panel_login()` 的返回文案改为同时给出 PersonalHub 面板链接与
LionWebsite 面板链接,`TELEGRAM_COMMANDS` 里 `login` 的描述同步更新。
- QQ(LionQQBot):既有 `/login`(别名 `/登录`)返回同样两条链接,共用同一套生成逻辑。
@@ -106,7 +115,19 @@ PersonalHub 的 `/login` 原本只签发**它自己面板**的票据
(`OneTimePanelLoginTickets` + `/panel/telegram-login`)。改造时保留这条,
再在同一回复里附加 LionWebsite 链接;两者的票据机制与有效期互不影响。
## 3. 可选收尾(未做,需要时另开任务)
## 3. 交付与复验
- 机器人侧提交状态:**两个机器人仓库的改动尚未提交 Git**(`v103` 侧待主人确认后
按项目约定提交,注意 PersonalHub 工作区另有前一轮未提交改动,勿混提)。
- `us9929main-chatgpt` 的独立复验(2026-09-21):
- 票据边界实测:`now` 与 `now-290s` 放行,`now-301s`、`now-400s`、`now+60s` 均落 `/denied`;
篡改签名与畸形串同样落 `/denied`。
- 密钥明文扫描:抓取两个任务目录全部正文与线程消息共 17 KiB,未出现密钥明文,
只有 4 处 `secret://` 引用。
- 内部接口鉴权:`POST /internal/panel-login` 无令牌与错令牌均返回 403。
- PersonalHub `/health` 返回 200;共享盘 waiting 指针已消费,队列已清空。
## 4. 可选收尾(未做,需要时另开任务)
- 移动端 `PrivateMainForMobile` 仍写死 `authCode: "alone"`。后端两种方式都接受,
所以它能用;要一并切到会话,照搬 `PrivateMain/src/store/index.js` 的改法即可。