这是第一次基于http域名成功的部署版本0718v1,修改了http与https都兼容的认证方式
This commit is contained in:
@@ -24,9 +24,9 @@
|
||||
- `POST /runs/{id}/results/{execution_id}/retry` 无请求体,沿用原 Run 的测试范围和自动仲裁配置,并以相同 `execution_id` 替换旧结果;仅 `completed / completed_with_errors` 状态允许提交。
|
||||
- `POST /runs/{id}/resume` 无请求体,返回 `skipped_count`;`POST /runs/{id}/retry-errors` 无请求体,返回 `retry_count`。两者返回 202 后必须重新获取运行详情,不能将 POST 响应视为执行完成;409 时也重新获取详情。
|
||||
- 单条重试返回 202 后按运行详情的 `poll_after_seconds`(缺省 2 秒)轮询,终态后重新获取结果。重跑期间旧结果可能暂时不存在,UI 保留“重新执行中”状态;404 刷新结果,409 刷新 Run,网络错误或 5xx 先刷新 Run,避免不确定是否受理时重复提交。
|
||||
- `POST /runs` 总是携带新的 UUID `Idempotency-Key`。
|
||||
- `POST /runs` 总是携带新的 UUID v4 `Idempotency-Key`;HTTPS 优先使用原生 `crypto.randomUUID()`,HTTP 环境使用 `crypto.getRandomValues()` 兼容生成,后端契约不变。
|
||||
- 登录和续约都会原子替换 access/refresh token 及两个过期时间。
|
||||
- access token 剩余不超过 30 分钟且用户最近 30 分钟有真实操作时,`POST /auth/refresh` 携带 UUID `Idempotency-Key`。
|
||||
- access token 剩余不超过 30 分钟且用户最近 30 分钟有真实操作时,`POST /auth/refresh` 携带同一共享生成器产生的 UUID v4 `Idempotency-Key`。
|
||||
- 网络错误和 5xx 最多尝试 3 次,且一直复用原 refresh token 和原 key;409 保留凭据并等待 `refresh_after`。
|
||||
- 普通业务请求首次 401 共享 single-flight 续约,成功后仅重放一次;只有 refresh 本身返回 401 才清除会话。
|
||||
- HTTP 204 按无响应体处理;403/404/409/422/502 映射为可操作的用户消息。
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
UI 页面只调用 `services/`;service 先用 `schemas/` 中的 Zod schema 校验请求,再由 `api/client.ts` 发起请求并用 Zod 校验响应。跨字段业务不变量也在 schema 层完成。错误统一进入 `errors/`,日志进入 `logging/` 并在输出前递归脱敏。
|
||||
|
||||
创建运行和 Token 续约统一通过 `idempotencyKey.ts` 生成 UUID v4 幂等键:安全上下文优先使用浏览器原生 `crypto.randomUUID()`,HTTP 或旧浏览器回退到 `crypto.getRandomValues()`;不使用可预测的 `Math.random()`。
|
||||
|
||||
```text
|
||||
pages/components → services → schemas + api client → FastAPI
|
||||
↓
|
||||
|
||||
+2
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
## 测试
|
||||
|
||||
`tests/unit` 覆盖脱敏、错误归一化、主题持久化、API 响应校验、认证原子存储、single-flight 续约、幂等重试、401 单次重放、运行数据不变量、结果语义标识和运行进入终态时的最终结果同步。`tests/integration` 验证主题切换、逐条结果筛选与搜索、单条重试结果跨筛选置顶跟踪等页面交互,以及所有 service 到后端路由的映射。
|
||||
`tests/unit` 覆盖脱敏、错误归一化、主题持久化、API 响应校验、认证原子存储、single-flight 续约、HTTP/HTTPS UUID v4 幂等键生成、幂等重试、401 单次重放、运行数据不变量、结果语义标识和运行进入终态时的最终结果同步。`tests/integration` 验证主题切换、逐条结果筛选与搜索、单条重试结果跨筛选置顶跟踪等页面交互,以及所有 service 到后端路由的映射。
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
@@ -15,6 +15,7 @@ pnpm build
|
||||
- 前端不包含 `TARGET_API_KEY` 或 `JUDGE_API_KEY`,也不应在 Vite 变量中暴露它们。
|
||||
- 完整认证对象保存在 `localStorage` 以支持多标签页原子轮换,不分开写入 access/refresh token;生产环境必须使用 HTTPS 并保持严格 CSP,降低 XSS 窃取风险。
|
||||
- 续约的待处理 refresh token 和 `Idempotency-Key` 作为一组保存;网络/5xx 失败后不换 key,refresh 401 或用户主动退出才清理凭据。
|
||||
- HTTP 部署缺少 `crypto.randomUUID()` 时使用 Web Crypto `getRandomValues()` 生成标准 UUID v4;若浏览器连安全随机源也不支持则明确失败,绝不降级为 `Math.random()`。
|
||||
- logger 对 password、token、API key、Authorization 等键及嵌套数据递归脱敏。
|
||||
- UI 权限控制只用于交互,真实授权必须由后端执行。
|
||||
- 生产环境应使用 HTTPS,并将后端 CORS 限制为实际前端域名。
|
||||
|
||||
Reference in New Issue
Block a user