6.8 KiB
TMS Auth Refactor Design
Date: 2026-03-30
Goal
在 tms-framework 中重构认证模块,完整承接旧管理端的认证标准流程,但只保留一套新规范接口与一套实现代码。重构范围只调整接口命名、DTO 字段命名、控制器职责和数据模型表达方式,不改变旧系统的业务判断顺序和安全规则。
Confirmed Scope
本设计覆盖:
SUPER_ADMIN / KEY_ADMIN / AUDIT_ADMIN / OPS_ADMIN四个正式角色- 口令登录与 UKey 登录两条标准流程
- 角色启用、重置密码、UKey 发行签名、UKey 绑定
- 当前会话、退出登录、修改密码
modules/auth/controller最终只保留新规范接口
本设计不覆盖:
- 前端页面重构
- PCIe / UKey 底层驱动实现重写
- 主密钥业务规则调整
/openapi/**外部接口鉴权模型
Legacy Semantics To Preserve
1. Four main roles
旧系统主角色与新系统角色一一对应:
superadmin -> SUPER_ADMINkeyadmin -> KEY_ADMINauditadmin -> AUDIT_ADMINconfigadmin -> OPS_ADMIN
2. UKey login is the standard full-auth flow
旧系统对上述四个主角色的标准登录方式是 UKey + 角色口令。
固定 UKey 数量要求:
SUPER_ADMIN需要 3 把 UKeyKEY_ADMIN需要 2 把 UKeyAUDIT_ADMIN需要 1 把 UKeyOPS_ADMIN需要 1 把 UKey
旧系统 UKey 登录必须保留的校验顺序:
- 角色与
rid组合匹配 - UKey 发行签名校验
uid/rid与角色认证信息匹配- 主密钥状态校验
- 后端随机数校验
- 登录签名校验
- 白名单校验
- 角色口令校验
3. Password login is a limited-auth flow
旧系统存在口令登录链路。新系统不再保留 KEY_ADMIN_A / KEY_ADMIN_B / auditadmin_user / configadmin_user 这样的历史角色代码,而是将其收敛为四个主角色在 LIMITED 认证等级下的登录结果。
也就是说:
- 口令登录成功 -> 同一主角色的
LIMITED会话 - UKey 登录成功 -> 同一主角色的
FULL会话
4. UKey binding is still a two-step process
旧系统“绑定角色 UKey”本质上是:
- 生成发行签名
- 绑定落库 / 写卡完成后的登记
这个两步流程必须保留,只是统一为新接口命名。
Domain Model
Roles
只保留四个正式角色枚举:
SUPER_ADMINKEY_ADMINAUDIT_ADMINOPS_ADMIN
AuthMethod
PASSWORDUKEY
AuthLevel
LIMITEDFULL
关系约束:
PASSWORD -> LIMITEDUKEY -> FULL
roleCode 表达“是谁”,authLevel 表达“当前认证强度”。接口权限只基于 roleCode + authLevel 判断,不再通过附加影子角色表达。
API Contract
只保留新规范路径,不再保留兼容旧路径控制器。
Authentication APIs
POST /api/v1/auth/password-loginPOST /api/v1/auth/ukey-login/randomsPOST /api/v1/auth/ukey-loginPOST /api/v1/auth/captchaGET /api/v1/auth/mePOST /api/v1/auth/logoutPOST /api/v1/auth/change-password
password-login
入参:
roleCodepasswordcaptchaCodecaptchaId
行为:
- 按旧口令登录顺序校验主密钥状态、验证码、密码和失败次数
- 成功后签发该角色的
LIMITED会话
ukey-login/randoms
入参:
roleCode
行为:
- 按角色要求下发固定数量随机数
ukey-login
入参:
roleCodepasswordukeyProofs[]
单个 ukeyProofs[] 项包含:
pubKeyuidridserverRandomissueSignatureloginPayloadloginSignature
行为:
- 完整保留旧项目 UKey 登录校验顺序
- 成功后签发
FULL会话
Role Administration APIs
POST /api/v1/auth/roles/{roleCode}/enablePOST /api/v1/auth/roles/{roleCode}/reset-passwordPOST /api/v1/auth/roles/{roleCode}/ukeys/issue-signPOST /api/v1/auth/roles/{roleCode}/ukeys/bind
这些接口统一要求:
KEY_ADMINFULL
Data Model
1. tms_auth_role_account
统一角色账户表,只保留四个主角色:
role_codedisplay_namerequired_ukey_countpassword_hashpassword_saltstatusneed_change_passwordfailed_countlocked_untillast_login_atlast_active_at
2. tms_auth_role_ukey_binding
统一 UKey 绑定表:
role_codeslot_nouidridukey_serialukey_pubkeyissuer_signstatusbound_atunbound_at
slot_no、uid、rid 是承接旧系统流程的必要字段,不能省略。
3. tms_auth_session
统一会话表:
session_tokenrole_codeauth_methodauth_levelissued_atlast_active_atexpires_atlogout_at
4. Captcha storage
验证码优先继续使用内存缓存,不在本次设计中新增持久化表。
Controller Structure
modules/auth/controller 最终只保留一套规范控制器:
AuthController- 认证、当前会话、修改密码
AuthAdminController- 角色管理、UKey 发行签名、UKey 绑定
删除:
CompatAuthController
Service Structure
建议保留三类核心服务职责:
AuthServicepasswordLoginukeyLoginissueUkeyLoginRandomsissueCaptchamelogoutchangePassword
AuthAdminServiceenableRoleresetPasswordissueUkeyBindingSignbindIssuedUkey
AuthPolicyService- 角色 UKey 数要求
LIMITED/FULL接口权限策略- 主角色与旧登录规则映射
Security and Permission Rules
新系统的权限表达统一为:
roleCodeauthLevel
示例:
KEY_ADMIN + FULL可启用角色、重置角色口令、绑定 UKeyKEY_ADMIN + LIMITED只能访问受限密钥管理接口AUDIT_ADMIN + LIMITED只能访问受限审计接口AUDIT_ADMIN + FULL可访问完整审计接口OPS_ADMIN + LIMITED只能访问受限运维接口OPS_ADMIN + FULL可访问完整运维接口SUPER_ADMIN + FULL才能访问最高敏感操作
Migration Strategy
本次重构不是保留旧接口再适配,而是:
- 只保留新接口
- 在服务层完整承接旧业务流程
- 删除
CompatAuthController及其兼容 DTO/测试 - 通过数据库迁移补齐
uid/rid/auth_method/auth_level等字段
Testing Strategy
至少覆盖:
- 口令登录成功签发
LIMITED - UKey 登录成功签发
FULL - UKey 数量不足失败
rid组合不匹配失败- 发行签名校验失败
- 登录签名校验失败
- 主密钥未就绪失败
- 角色启用、重置密码、绑定 UKey 权限限制
- 删除兼容控制器后 OpenAPI 与控制器测试同步更新
Final Decision
本次 auth 重构最终基线为:
- 只保留新规范接口
- 只保留四个正式角色
- 保留两条标准登录流程
- 使用
authLevel区分认证强度和接口权限 auth/controller仅保留一套规范控制器实现