feat(auth): replace TOTP with phone-first login

This commit is contained in:
2026-07-28 17:39:29 +08:00
parent e7d350ec3d
commit c7f9a4e3c9
43 changed files with 18386 additions and 882 deletions

View File

@@ -41,7 +41,6 @@ Tenant Active
+ Module / Feature 可用
+ Operation Permission
+ DataScope / Resource Scope
+ 必要时 MFA
```
验收:
@@ -53,7 +52,7 @@ Tenant Active
## P1接口最小权限与 DataScope 审计
- 建立 endpoint authorization manifestmethod、route、realm、module、permission、DataScope、MFA、audit action。
- 建立 endpoint authorization manifestmethod、route、realm、module、permission、DataScope、audit action。
- 后台写接口不得只使用 `[Authorize]`
- tenant/platform 权限不得串用。
- `[AllowAnonymous]` 只能出现在白名单路由。

View File

@@ -28,9 +28,9 @@ Client
## 账号与 Session
- 账号由 ASP.NET Core Identity 管理。
- 密码最少 10 位PBKDF2 迭代次数 210,000。
- 密码最少 8 位且必须同时包含字母和数字PBKDF2 迭代次数 210,000。
- 连续 5 次密码失败后锁定 15 分钟。
- TOTP、恢复码和 Authenticator Key 使用 Identity 标准能力
- 普通租户用户使用手机号和密码或手机号短信验证码登录;平台管理员当前使用账号和密码登录
- 微信等外部身份只保存 provider subject、openid、unionid不保存 `session_key` 或原始 secret。
- Data Protection key 持久化到 PostgreSQL非 Development 环境必须提供带私钥的 PKCS#12 证书保护 key ring。
@@ -40,7 +40,6 @@ Access token
- 固定 15 分钟。
- 包含 `sub``sid``jti``iat``iss``aud``exp``scope`
- tenant token 必须包含 `tid`platform token 禁止包含 `tid`
- 完成 MFA 的 Session 可包含 `amr=mfa`
- 不包含 role 或 permission claim。
Refresh token
@@ -83,7 +82,7 @@ Host 是认证上下文,不是普通参数。`TenantResolutionMiddleware` 在
- 租户角色、权限、菜单、用户角色绑定都带租户上下文。
- 平台角色不带租户键,不能自动读取租户业务数据。
- 菜单只决定 UI bootstrap 展示,不作为 API 授权依据。
- 后台 API 必须声明明确 permission高风险写操作按策略要求 MFA 和审计。
- 后台 API 必须声明明确 permission高风险写操作必须记录审计。
DataScope
@@ -103,14 +102,14 @@ DataScope
必须落审计:
- 登录、刷新重放、logout-all、强制改密、MFA 变更
- 登录、刷新重放、logout-all、强制改密
- 角色、权限、成员状态、租户状态、Provider 配置、支付运营动作;
- System Scope 和跨租户平台操作。
错误响应:
- 401未认证或 token/session 无效。
- 403已认证但 realm、tenant、permission、DataScope、MFA 或套餐能力不满足。
- 403已认证但 realm、tenant、permission、DataScope 或套餐能力不满足。
- 404未知 Host、不可见资源或需要隐藏存在性的资源。
- 响应不得泄露完整手机号、openId、邮箱、密钥、支付账号或内部 provider payload。

View File

@@ -64,11 +64,9 @@ DbMigrator 会执行全部 EF Core Migration并在全新 Development 数据
请立即保存终端显示的临时密码。重复执行 DbMigrator 是幂等的,不会重复创建管理员、重置密码或再次显示密码。
管理员首次登录后必须
管理员首次登录后必须修改临时密码。正式密码至少 8 位,并同时包含字母和数字;平台管理员当前使用账号和密码登录,不要求绑定认证器。
1. 修改临时密码;
2. 绑定 TOTP MFA
3. 保存一次性恢复码。
普通租户用户以手机号作为账号,可以使用手机号和密码登录,也可以使用手机号和短信验证码登录。
如果数据库已经包含平台管理员,自动初始化会跳过。不要为了重新获取密码删除包含业务数据的数据库。