动态密码策略与首次登录改密
本页描述 9.0.5 候选能力。必须先发布并升级配套后端、PC 前端及官方系统设置、系统账号应用;文档存在不代表当前租户已经安装。
管理员配置
在当前租户系统设置中维护以下策略,继续由原系统设置权限管理。
| 配置 | 作用 |
|---|---|
PwdShortestLength | 密码最短长度 |
PwdContainNumber | 要求包含数字 |
PwdContainUpperLower | 同时包含 ASCII 大写和小写字母 |
PwdContainSpecial | 要求包含特殊字符 |
PwdForceFirstChange | 新建或管理员重置密码后的首次登录改密 |
密码策略是普通可公开业务配置,不另加容器环境变量或私密配置副本。每次服务端写密码读取主库唯一启用且未删除的配置,重复或非法配置拒绝执行。
“包含混合大小写”要求同时含 ASCII 大写、小写字母;数字是单独要求。验证和哈希处理原始密码,不擅自 trim。保留现有最短长度设置及历史缺省兼容规则。
开启首次改密后,之后新建或管理员重置的密码被标记为初始密码。既有账号不会被批量改密码或补标记。用户验证后自行改密会清除标记;修复历史编码不会清除标记。
用户登录
初始凭据验证成功后,服务端返回 Code=1008、动态策略与五分钟一次性改密票据,尚未创建 JWT 或在线会话。PC 端显示“首次登录修改密码”弹窗,输入和确认新密码,成功后重新登录。账号密码、短信、人脸及已接入的登录分支都先处理该状态再持久化 Token 或进入首页。
固定 Managed 入口 platform-first-password-change 仅支持 HTTPS POST Complete 与 Inspect,不是普通改密代理。它不接受目标租户、用户、角色、编码密码、SQL 或 Hook 参数。匿名请求必须持有真实认证签发的短票据。票据、密码、确认密码不写浏览器存储或业务日志;离开弹窗立即清除内存。
客户端第一次提交生成稳定 RequestId。结果不确定时显示“正在核实原请求”,仅查询同一请求;不能换编号重发。已实际提交但丢回执时,主库收据可能已存在,不能根据网络错误宣称回滚。成功查询后仍重新登录。
后端与分布式边界
普通系统账号表单通过原 SubmitBeforeServerV8 调用固定 PrepareSysUserFormPassword()。宿主核验真实表、提交事件、动作与原事务;原有必填、业务和权限事件继续执行。管理员重置、本人验证改密、短信重置、原生创建及 SSO JIT 共用动态策略与凭据状态原子,客户端不能提交 PwdEncode/PwdRevision/PwdChangeRequired 清除限制。
首次改密使用 Redis 原子消费短票据,在同一数据库事务中 CAS 更新原密码摘要、revision、初始标记及唯一 RequestId 收据,提交前后撤销旧会话。内部 mci_password_change_receipt 只保存票据 hash、租户 HMAC 请求摘要、用户、完成 UTC 与新 revision;必须有真实永久单字段唯一索引。普通 Client CRUD 即使授予管理员也不可读写该表。
旧账号没有两个状态字段或迁移后两个均 NULL,按未标记处理,不自动写回;只存在一个字段或非法值失败关闭。JWT 携带凭据 revision,认证时与主库真实状态核对,旧会话不能绕过待改密状态。先扩展再开启策略,混跑旧后端不满足该保证。
上线验收
依次验证:管理员创建或重置账号、弱密码后端拒绝、正确初始密码进入改密而无 JWT、成功后重新登录、旧票据重复拒绝、旧会话撤销、网络丢回执查询原收据、普通用户及跨租户拒绝。检查主库字段、唯一索引、Redis 共用与多节点时钟。已完成的本地 SQLite/测试端口回归不能替代目标数据库、真实 Redis、HTTP、多节点、浏览器与手机验收。