status: complete created: 2026-08-04 complexity: 🟠中等
当前 Admin UI 已在启动阶段读取匿名运行配置 /crypto/config,H5 与报表端仍分别维护硬编码的 enabled=true。配置中心关闭通用传输加密后,H5 和报表端继续按旧状态协商密钥或封装密文,造成前后端协议不一致。
登录密码 RSA 又错误复用了通用传输加密总开关。用户名密码和用户名密码验证码两种认证策略还使用了不同的解密实现,导致同一份登录请求在不同认证方式下行为不一致。
本变更目标:
/crypto/config 读取通用 API 传输加密运行配置。enablePasswordEncryption,不再依赖 forge.crypto.enabled。/auth/loginConfig 向未登录客户端返回密码加密策略,三个前端严格按该策略决定是否 RSA 加密。encrypted 标记。/crypto/config 与 /auth/loginConfig 必须保持匿名、明文和安全裁剪,不返回对称密钥、RSA 私钥或其它部署密钥。LoginConfig 新增 enablePasswordEncryption=true。LoginConfigResult 下发该字段。UsernamePasswordAuthStrategy、UsernamePasswordCaptchaAuthStrategy 复用同一解密组件。SystemAuthServiceImpl 使用同一策略向 /auth/loginConfig 返回值。/auth/loginConfig.enablePasswordEncryption 决定是否加密。cryptoConfig.enabled。/crypto/config,归一化 enabled、enableApiCrypto、算法和路径配置。userClient=h5 的 /auth/loginConfig,按独立密码策略加密。/forge-report-api/crypto/config。/forge-report-api/auth/loginConfig?userClient=forge_report,按独立密码策略加密。sys_config_group.login JSON 缺少新字段时,由 Java 默认值 true 保持安全兼容;管理员下次保存登录配置后字段写入 JSON。GET /auth/loginConfig 响应新增:{
"enablePasswordEncryption": true
}
GET /crypto/config 接口地址及安全裁剪协议不变,仅由 H5、报表端新增消费。