458e13b807
ci/woodpecker/tag/build Pipeline was successful
多个无凭证实验已确认: - /api/sec_js 的 DK 盐每次请求都不同,且与会话无关(同 cookie 两次也不同); - 服务端只能从密文里还原 DK,不依赖任何会话状态; - 用当次 sec_js 加密的密文,服务端必定能解开(返回「用户名或密码错误」而非解码错误); - 无/无效 CASTGC 时 CAS 直接返回 200+登录页(Set-Cookie 清除 CASTGC), 根本不会给出 ticket——所以「参数解码错误」发生时 ticket 是有效的, 失败只可能发生在 /cas/callback 的解密环节。 由此推论:取盐与提交之间若服务端轮换了 DK,就会解密失败。 官方前端对该错误的提示正是「刷新页面后尝试」,说明官方也视其为可重试的 瞬时问题,而非致命错误。 改动: - 新增 isXsgzDecodeError:仅当响应体含「参数解码错误」时为真 (凭证错误、ticket 无效等不触发重试); - 命中时重新拉取 sec_js、重新加密、重新提交一次。 安全性:解码失败意味着服务端没解出内容,ticket 未被消费, 因此重试不会浪费这张一次性 ticket。 日志:重试时记录 dkChanged(两次盐是否不同), 可据此确认线上是否真的发生了轮换,为后续是否加重试次数提供依据。