77 lines
3.3 KiB
Markdown
77 lines
3.3 KiB
Markdown
|
|
# 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`
|