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/,摘要與源碼哈希見 驗證證據。