Skip to content

API Key 创建请求 ID 支持 HTTP 访问 ​

状态:archived 类型:bug-fix Owner:web/src/components/ApiKeyManagementComponent.vue

问题 ​

普通 HTTP 地址中的浏览器不提供 crypto.randomUUID(),API Key 创建弹窗因此在发出请求前抛异常。客户端请求 ID 是创建幂等标识,服务端 user_router.py 接受长度为 8–64 的字母、数字及指定分隔符字符串。

决策 ​

弹窗使用 crypto.getRandomValues() 产生 16 字节随机值,编码为 32 位十六进制请求 ID。已有 sessionStorage 请求 ID 原样复用;失败重试保留 ID,成功或取消后清除。API Key secret 仍由服务端拥有。

替代方案 ​

要求 HTTPS 能解决浏览器 API 限制,但不能覆盖现有 HTTP 部署。新增 UUID 库或保留两种生成路径没有当前格式契约上的必要性。时间戳与 Math.random 的组合不如浏览器随机源可靠。

后果 ​

请求 ID 保留 128 位随机熵,符合现有接口与数据库约束,不引入依赖或迁移。部署仍需支持 Web Crypto 的现代浏览器。该修复完整收敛于弹窗的 ID 生成,没有待裁决的接口或持久化变化,因此直接记录为 implemented。

验证 ​

web/test/unit/apiKeyManagement.test.js 在没有 randomUUID 的环境执行真实组件脚本,验证弹窗、请求载荷、失败重试、成功清理和已有 UUID 的兼容。恢复直接调用 randomUUID 时,测试因原始 TypeError 失败。运行命令:docker compose exec web pnpm run test:unit。浏览器验证负责确认普通 HTTP 环境中的真实 DOM 点击行为;该前端修复不改变后端密钥派生与持久化语义。

本项目基于 MIT License 开源,欢迎使用和贡献。