feat: sync lijiaoqiao implementation and staging validation artifacts

This commit is contained in:
Your Name
2026-03-31 13:40:00 +08:00
parent 0e5ecd930e
commit e9338dec28
686 changed files with 29213 additions and 168 deletions

View File

@@ -0,0 +1,76 @@
# TOK-003/TOK-004 测试断言清单(生命周期 + 审计事件)
- 版本v1.0
- 日期2026-03-29
- 状态:开发实施测试基线
- 适用任务:`TOK-003``TOK-004`
## 1. 测试范围
1. TOK-003签发、续期、吊销、过期生命周期。
2. TOK-004签发/校验失败/吊销/越权事件入库与可追踪。
## 2. 前置数据
1. 租户:`tenant_id=1001`
2. 主体:
- `subject_owner=2001`
- `subject_viewer=2002`
3. 角色策略:
- owner: `supply:*`
- viewer: `supply:read`
4. 观测阈值:
- 吊销生效延迟 `<=5s`
- 审计事件落库延迟 `<=3s`
## 3. TOK-003 生命周期断言
| 用例ID | 场景 | 步骤 | 断言 |
|---|---|---|---|
| TOK-LIFE-001 | 签发成功 | 1) 调用 `POST /tokens/issue` 2) 记录返回 | 1) `status=active` 2) `expires_at>issued_at` 3) `token_id` 唯一 |
| TOK-LIFE-002 | 签发参数非法 | 1) `ttl_seconds` 超上限 2) 调用签发 | 1) 返回 `400` 2) 不落 active token |
| TOK-LIFE-003 | 同键幂等签发重放 | 1) 相同 `Idempotency-Key` 重复提交 | 1) 返回同一 `token_id` 2) 无重复写入 |
| TOK-LIFE-004 | 续期成功 | 1) 调用 `POST /tokens/{tokenId}/refresh` | 1) `expires_at` 延后 2) `status=active` |
| TOK-LIFE-005 | 吊销成功 | 1) 调用 `POST /tokens/{tokenId}/revoke` 2) 立刻 introspect | 1) 最终 `status=revoked` 2) 生效延迟 <=5s |
| TOK-LIFE-006 | 吊销后访问受限接口 | 1) 使用被吊销 token 访问受保护路由 | 1) 返回 `401 AUTH_TOKEN_INACTIVE` |
| TOK-LIFE-007 | 过期自动失效 | 1) 签发短 TTL token 2) 等待过期 3) introspect | 1) `status=expired` 2) 返回不可用错误 |
| TOK-LIFE-008 | viewer 越权写操作 | 1) viewer token 调用写接口 | 1) 返回 `403 AUTH_SCOPE_DENIED` 2) 无写入副作用 |
## 4. TOK-004 审计事件断言
| 用例ID | 场景 | 步骤 | 断言 |
|---|---|---|---|
| TOK-AUD-001 | 签发成功事件 | 执行 TOK-LIFE-001 | 1) 存在 `token.issue.success` 2) 字段齐全 |
| TOK-AUD-002 | 签发失败事件 | 执行 TOK-LIFE-002 | 1) 存在 `token.issue.fail` 2) `result_code` 准确 |
| TOK-AUD-003 | 鉴权失败事件 | 无效 token 访问受保护路由 | 1) `token.authn.fail` 入库 2) 含 `request_id` |
| TOK-AUD-004 | 越权事件 | 执行 TOK-LIFE-008 | 1) `token.authz.denied` 入库 2) 含 `subject_id` |
| TOK-AUD-005 | 吊销事件 | 执行 TOK-LIFE-005 | 1) `token.revoke.success` 入库 2) 含 `token_id` |
| TOK-AUD-006 | query key 拒绝事件 | 使用 query key 访问接口 | 1) `token.query_key.rejected` 入库 2) 不出现敏感值 |
| TOK-AUD-007 | 事件不可篡改 | 重复读取同 `event_id` | 1) 核心字段不可变 2) 时间顺序正确 |
## 5. 字段级硬断言
每条审计事件必须包含:
1. `event_id`
2. `request_id`
3. `result_code`
4. `route`
5. `created_at`
可选字段规则:
1. `token_id`:提取失败场景可空,其余场景必填。
2. `subject_id`:匿名失败场景可空,其余场景必填。
禁止项:
1. 不得写入上游供应方凭证明文。
2. 不得写入完整 `access_token` 明文(仅允许哈希或指纹)。
## 6. 结果判定
1. TOK-003 通过标准:
- `TOK-LIFE-*` 全通过
- 吊销延迟阈值满足 `<=5s`
2. TOK-004 通过标准:
- `TOK-AUD-*` 全通过
- 审计字段完整率 `=100%`
- 敏感数据泄露事件 `=0`