Launch SDK 账号退出重试修复
日期:2026-10-24。已修复 AUTH-07,并同步 Go、JavaScript、Python、C#、Java、Ruby、Rust、C、C++ 的账号生命周期入口。未部署、未发布 SDK、未提交或推送 Git。 本任务没有修改 Launch 或 Licentivo 服务端业务代码。
行为
显式退出先将安全存储中的账号记录标记为“仅待撤销”,再调用官方 SDK 退出并向 Launch 提交账号会话撤销。无论网络或取消状态如何,本地运行时都会停止,不允许继续执行受保护功能。
Launch 未确认撤销时,SDK 保留待办及重试所需的原账号凭据,不再把它当作已登录账号。再次 Logout、Login 或 Restore 会恢复撤销请求;Restore 不会拿待办请求身份或启动授权运行时。收到成功响应,或收到表明原会话已不能认证的 HTTP 401 后,才删除账号待办。因此响应丢失也能恢复,不会出现“第二次退出返回成功,但从未补交撤销”的情况。
正常已登录记录仍兼容 v2。待撤销记录使用私有 v3 格式;Java、Rust 还移除了正常登录所需的凭据字段形状,避免旧版 SDK 将待办误当成正常登录。待办不保存短期身份断言、许可证密钥或签名许可。
账号待办使用原来配置的安全 Store。跨进程恢复需要持久化安全存储,例如 Windows DPAPI 或 SDK 支持的加密存储;默认 MemoryStore 只在本进程保留数据。重试由后续登录、恢复或退出操作触发,没有新增独立后台任务。存储或撤销未完成会返回错误或待完成结果,不提示成功。
Licentivo SDK 的设备退出票据和 .logout.json 仍由它管理,Launch 不删除其缓存目录,不判断设备、功能或离线权限。同步更新了原生示例和各语言 SDK 文档。
验证
| 范围 | 结果 |
|---|---|
| Launch Go 源码包 | 185 条测试通过记录,含子用例;无失败;go vet 通过 |
| 真实 Launch HTTP 与 MySQL | 退出请求中断后,安全待办保留;重建 SDK 后无法恢复登录;网络恢复后补交撤销,旧 token 的认证和身份接口均返回拒绝 |
| JavaScript | 10 项通过,含退出失败、重建恢复、401 确认 |
| Python | 8 项通过,含退出后本地账号清理、重建恢复和 Windows DPAPI |
| C# | 生命周期、待办恢复、SDK 退出日志保留及 DPAPI 检查通过 |
| Java | 7 组生命周期与安全测试通过,含离线退出重试 |
| Ruby | 账号生命周期、待办恢复和加密存储回归通过 |
| Rust | 全部本地测试通过,含待办重建恢复和实际 SDK 运行 |
| C / C++ | 实际签名 SDK、断网重建恢复、401 确认、DPAPI 和 C++ 运行入口通过 |
| Licentivo 当前授权修复 | 45 条测试通过记录,无失败、无跳过;包含策略漂移下负向通知、低配设备协调、人工设备上限及现有授权回归 |
| 嵌入的官方 SDK | 清单中 115 个文件哈希全部匹配,未修改其授权或加密实现 |
Launch 源码回归中,TestMySQLBaseline、TestProductUploadRoundTrip、TestInitialAdministratorMustChangePasswordBeforeAdministration、TestNewPaymentProvidersAndRegistrationWithoutMail 四项依赖其他专用库的测试跳过,未计作通过;本次 SDK、账号 HTTP、购买同步和映射流程使用独立测试库完成验证。
两端联调
使用本机独立 MySQL 8.0.32、当前 Launch、Licentivo 服务及其工作进程、实际 Go Launch SDK 与官方授权运行时、DPAPI 账号存储,完成 15 个业务阶段。
新增两种退出故障验证:
- 请求未送达 Launch:账号退出接口暂时返回 503。SDK 停止本地功能,真实 Licentivo 设备绑定释放,账号撤销待办保留。重建 SDK 后仍只重试退出;恢复连接后,原 Launch 会话被撤销,Licentivo 确认收到对应会话通知。
- 服务端已撤销,但回包丢失:Launch 已处理退出,测试代理将响应替换为 503。待办跨 SDK 重建保留;恢复连接后,通过 HTTP 401 确认原会话失效并删除待办。过程中没有恢复登录或重新激活设备。
其余阶段覆盖实际购买同步与签名功能运行、普通关闭恢复、正常退出、远程解绑及旧代次、续费退款、账号撤销与重新登录、全额退款拒绝运行、退款恢复、拒付和大文档翻译回归。Licentivo 三项更新由其负责方提供,本任务只构建和验证。
支付渠道和 DeepL 使用隔离模拟服务,没有真实扣款、退款或付费翻译。真实联合服务验证使用 Go;其他语言完成本地 SDK 回归,不声称九种语言分别完成了一套真实服务部署验收。
本轮未访问 192.168.2.177。MySQL 与 Licentivo 临时进程均已停止,原有服务及测试证据保留。原始材料在 .local/logout-retry-fix-20261024/,摘要与源码哈希见 验证证据。