Files
2026-06-26 11:50:23 +08:00

10 KiB
Raw Permalink Blame History

PJ2026-010501 账号会话

修改历史

版本 对应 commit id 更新日期 变更说明

当前正文仍在规格治理草稿中;未定稿前不新增版本号,不为单次编辑追加 待提交 版本。

正文

PJ2026-010501 账号会话需求规格

1. 文档控制

字段 内容
编号 PJ2026-010501
短名 账号会话
层级 L2 课题
状态 已生效
需求规格模板 ISO/IEC/IEEE 29148 需求规格模板
上级规格 PJ2026-0105 用户管理
规格治理索引 规格治理

本文采用 ISO/IEC/IEEE 29148 需求规格模板的项目裁剪版:正文只保留账号会话的稳定使命、范围、术语、系统边界、内部分工和原子需求。

2. 目的和范围

2.1 目的

账号会话负责 HWLAB 的个人账号身份事实,使用户、管理员、Web、CLI、API 和内部服务都能引用同一套注册、登录、会话和当前用户上下文。

D601 v0.3 当前已具备 app-local 注册、登录、登出、会话检查、当前用户、profile 和 password 基础接口;本课题在该基线上定义后续安全设置、身份恢复和多端会话治理的目标能力。

2.2 范围内

  • 用户注册、登录、登出、会话检查、会话续用和当前用户身份。
  • 用户 profile、显示名、邮箱状态、密码修改和账号状态。
  • 会话与用户状态、角色和禁用状态的一致校验。
  • 邮箱验证、找回密码、多因素认证、账号绑定和登录安全通知的规格边界。
  • Web session、API key principal 和内部服务 principal 对同一用户身份的消费边界。
  • 浏览器同源 hwlab_session 到 canonical principal 的唯一解释通道,以及 recovery/bootstrap 身份的显式边界。

2.3 范围外

3. 术语表

术语 定义
app-local 账号 HWLAB 自身维护的账号体系,不依赖 Keycloak 作为主身份源。
Web session 浏览器登录后由服务端签发并可校验的会话状态。
principal 内部服务消费的已认证调用主体,包含用户、角色、状态和来源。
canonical principal 认证层把 Web session、API key 或受控 recovery 身份解释后产出的最小身份主体,包含 authMethodidentityAuthoritysessionKind、actor 摘要和后端授权摘要。
当前用户 通过 session 或 API key 校验后得到的用户身份事实。
身份恢复 用户在忘记密码、邮箱验证或账号安全事件后恢复访问的受控流程。

4. 系统边界和接口

本规格把账号会话作为用户管理的身份事实层看待;本章只描述输入、输出和责任边界。

边界项 内容
外部使用者 普通用户、平台管理员、Cloud Web、CLI、HTTP API、Agent编排和需要用户身份的内部服务。
外部输入 注册资料、登录凭据、登出请求、会话 cookie、密码修改请求、profile 修改请求、账号状态变化和身份恢复请求。
受控资源 用户账号、密码哈希、profile、邮箱状态、用户状态、角色、Web session 和当前用户上下文。
外部输出 登录结果、会话状态、当前用户摘要、profile 摘要、认证错误、禁用/未认证错误和身份恢复状态。
用户接口 Cloud Web auth 入口、HTTP auth API、hwlab-cli 用户身份命令。
系统边界 账号会话负责用户身份和 session 真相;不定义 API key 策略、组织授权、Agent 执行、页面布局或发布机制。

5. 内部分工与规格索引

编号 模块或课题 规格文档 主责边界 上游依赖 下游支撑
PJ2026-01050101 注册登录 本规格 6.1 app-local 注册、登录和登出语义 客户端入口、平台数据库 Web、CLI、API
PJ2026-01050102 会话状态 本规格 6.2 session 检查、当前用户和禁用状态生效 注册登录、平台 Secret API key、Agent编排、客户端
PJ2026-01050103 Profile安全 本规格 6.3 profile、密码修改和安全设置 用户身份、客户端账户入口 用户自服务、admin 用户管理
PJ2026-01050104 身份恢复 本规格 6.4 邮箱验证、找回密码和多因素认证边界 邮件/通知能力、平台配置 用户恢复、运营支持
PJ2026-01050105 用户导航ACL PJ2026-01050105 用户导航ACL 浏览器 session transport、canonical principal、YAML 预置用户和根导航 ACL 边界 注册登录、会话状态、权限配额、YAML运维 API契约、Web工作台、业务 API

6. 原子需求

6.1 USER-ACCT-REQ-001 注册登录

编号 短名 主责模块 关联模块
USER-ACCT-REQ-001 注册登录 PJ2026-01050101 注册登录 客户端平台运维

账号会话应提供 app-local 注册、登录和登出能力,使 HWLAB 可以在不引入 Keycloak 主路径的前提下承载多用户云服务身份。

注册登录必须写入用户管理的用户事实源,返回可被 Web、CLI、API 和内部服务共同理解的认证结果。客户端负责呈现入口和错误,平台运维负责持久化和 Secret 支撑。

6.2 USER-ACCT-REQ-002 会话状态

编号 短名 主责模块 关联模块
USER-ACCT-REQ-002 会话状态 PJ2026-01050102 会话状态 客户端Agent编排

账号会话应提供可检查、可续用、可撤销的 session 状态,使当前用户、角色和账号状态能够在每次受保护访问前被一致判断。

被禁用、被撤销或未认证的 session 必须以明确错误进入客户端和内部服务,不得由 Agent、HWPOD、账单或页面状态自行猜测身份有效性。

6.3 USER-ACCT-REQ-003 Profile 与安全设置

编号 短名 主责模块 关联模块
USER-ACCT-REQ-003 Profile安全 PJ2026-01050103 Profile安全 客户端账单后台

账号会话应提供 profile、密码修改和账号安全设置能力,使用户能够维护基本资料和登录安全,而不影响账本、API key 或任务事实。

profile 安全设置只拥有账号资料和登录安全事实。余额通知、账单展示和运营视图可消费这些资料,但不能把页面状态作为账号事实源。

6.4 USER-ACCT-REQ-004 身份恢复

编号 短名 主责模块 关联模块
USER-ACCT-REQ-004 身份恢复 PJ2026-01050104 身份恢复 客户端平台运维

账号会话应定义邮箱验证、找回密码、多因素认证和账号绑定的恢复边界,使用户在安全事件或凭据丢失后有受控恢复路径。

身份恢复必须通过用户管理状态机更新账号事实,并由平台运维提供邮件、Secret 和运行支撑。未实现的恢复能力不得由临时 admin SQL、直接改库或客户端本地状态替代。

6.5 USER-ACCT-REQ-005 Web 鉴权唯一通道

编号 短名 主责模块 关联模块
USER-ACCT-REQ-005 用户导航ACL PJ2026-01050105 用户导航ACL API契约客户端权限配额YAML运维

账号会话应把浏览器同源 hwlab_session 视为 Web session transport,由后端唯一认证入口解释为 canonical principal。Cloud Web、Workbench、Usage、Billing、Admin 和 Code Agent 等业务面只能消费这个 principal 与后端 capability 摘要,不得在页面、route 或业务 handler 中重新解析 cookie prefix、Bearer、hws_、API key secret、user-billing token 或 localStorage authority 来定义用户身份。

canonical principal 至少应表达 authenticatedauthMethodidentityAuthoritysessionKind、actor 摘要和脱敏 capability 摘要。authMethod 用于说明 transport 来源,例如 Web session、user-billing session、API key 或 local-bootstrapidentityAuthority 用于说明身份事实归属,例如 hwlab-localuser-billingbootstrap-recoverysessionKind 用于区分浏览器、API key 和 recovery 身份。local/bootstrap 或 recovery 身份不能静默伪装成完整业务用户,必须在 canonical principal 中显式标记其能力边界和 blocker。

身份验证和业务授权必须分层:账号会话先证明“当前调用主体是谁”;权限配额、账单后台、Agent编排、Workbench 和 Admin 再判断“该主体能做什么”。billing、usage、API key、Workbench 或 Code Agent 的业务 capability 不得反过来决定 Web 是否已登录。未登录、禁用、撤销或能力不可用必须返回结构化错误或 blocker,不能让前端通过二次登录、API key 输入、cookie prefix 判断或 fallback endpoint 补救身份。

D601 v0.3 预置用户、根导航 navId、nav profile、Secret sourceRef、session access claim、router guard 和后端 API capability enforcement 的专项边界见 PJ2026-01050105 用户导航ACL。该专项规格是本需求在 YAML-first 预置用户与根导航访问控制方向的 P0 SPEC-first source of truth。