docs: specify encrypted recruitment credential vault
Pipelines as Code CI / hwlab-web-probe-sentinel-nc01- Success
Pipelines as Code CI / platform-infra-gitea-nc01- Success
Pipelines as Code CI / unidesk-host- Success

This commit is contained in:
pikastech
2026-07-19 08:55:16 +02:00
parent 57fe80a19f
commit 266afad92c
@@ -22,6 +22,7 @@
- 账号、简历、岗位和申请状态投影。
- 图形验证码、短信验证码、真人校验、资料补充和提交确认等人工事项。
- 统一管理员密码认证、HTTPS 公开入口和受控会话。
- 招聘账号密码的本地加密保存、按单位生成、查看和复制。
- Vite 前端与 Bun API 的 native 热重载开发形态。
- 声明式业务状态、本地私密运行状态和外部表单工作流的边界。
@@ -41,6 +42,7 @@
| 人工事项 | 自动流程需要本人查看、填写或确认后才能继续的任务。 |
| 业务状态 | 可提交到私有仓库的单位、材料和申请公开状态。 |
| 私密运行状态 | 工作流 ID、验证码 artifact、本人答案和其他不得提交的临时状态。 |
| 招聘密码库 | 以统一管理员密码派生密钥加密、按单位保存招聘账号和密码的本地私密状态。 |
## 4. 系统边界
@@ -59,6 +61,7 @@ flowchart LR
Career[单位与申请 YAML] --> API[Bun API]
Tasks[本地人工事项] --> API
Secret[统一密码 sourceRef] --> API
Vault[本地加密招聘密码库] <--> API
Workflow[外部表单工作流] <--> API
API --> Vite[Vite Web 工作台]
Vite --> Edge[HTTPS 公共边缘]
@@ -69,6 +72,8 @@ flowchart LR
- 端口、启动命令、状态路径和认证来源由求职仓库 `config.json` 拥有。
- 公共域名、TLS upstream 和 health path 由 UniDesk public exposure YAML 拥有。
- 私密运行状态只保存在求职仓库 `.state/`
- 招聘密码库密钥只从统一管理员密码派生,不维护第二个主密码。
- 招聘密码明文只在已认证会话的单条显式查看请求中返回。
## 6. 原子需求
@@ -104,6 +109,19 @@ native 开发应同时保持前端 HMR 和 API 文件监听热重载。服务端
账号注册可在本人授权和验证码完成后执行。每人限报一个、提交后不可修改或其他高影响岗位申请只能保存草稿,最终提交前必须生成人工确认事项。
### 6.9 FJ-REQ-009 招聘密码库
工作台应为每个单位管理独立招聘账号和密码,并满足以下要求:
- 使用密码学安全随机源生成符合指定长度的密码。
- 密码库文件只保存在 `.state/`,文件权限为 `0600`
- 密码库使用统一管理员密码派生的密钥进行认证加密。
- 单位列表和密码库摘要只返回账号、密码是否存在和更新时间,不返回密码明文。
- 查看或复制密码必须由已认证用户对单个单位显式触发。
- 前端不得把全部密码预加载到页面状态。
- API、CLI、日志、TaskTree、Git 和错误响应不得打印密码明文。
- 更新密码时应覆盖该单位的加密条目,不保留可由普通接口读取的历史明文。
## 7. 验收契约
- 未登录打开正式 HTTPS 入口时只显示登录界面。
@@ -112,3 +130,6 @@ native 开发应同时保持前端 HMR 和 API 文件监听热重载。服务端
- 图形验证码事项能显示受控图片并把值传入对应工作流,页面和日志不回显验证码。
- 修改前端源码后 HMR 连接保持可用,修改 API 源码后服务自动重载。
- 桌面和移动视口均无文本重叠、横向页面溢出或操作按钮不可达。
- 正确登录后能为单个单位生成、查看和复制招聘密码。
- 未登录请求、单位列表请求和密码库摘要请求均不能取得密码明文。
- 密码库文件和 Git diff 中不出现招聘密码明文。