多 key:OAuth 登录签发附加 key 不再轮换,keys 管理端点

This commit is contained in:
host committed 2026-10-26 16:27:42 +08:00
1 parent aa5ad41eba
commit 7b85b4a4fd
7 files changed
+544 -37

No files matched your search

+17 -4
View File
@@ -135,10 +135,23 @@ client_secret(只走环境变量),不是无认证后门。
只绑 `127.0.0.1:8765`,没有公网入口、没有 TLS,这一步是部署
前置——需要在部署侧配反向代理 + TLS 证书并把公网域名指到
server,再把该域名下的回调地址填进 OAuth 应用的注册信息里。
- 登录后 API key 的保存与轮换规则:新用户拿到创建时生成的 key;
已存在用户每次 OAuth 登录都会轮换 key(旧 key 立即失效),
因此不要把旧 key 存到多处长期复用;key 明文只在回调成功页/
响应里出现一次,丢了只能重新走一次 OAuth 登录拿新 key。
- 登录后 API key 的保存与多 key 规则:新用户拿到创建时生成的
primary key;已存在用户每次 OAuth 登录签发一个附加 key
(label 为 `oauth:<provider>`),旧 key(primary 与之前的附加
key)全部继续有效,不再轮换——登录不会打断已存得到处都是的
旧 key。响应里的 `api_key_rotated` 字段为向后兼容保留,恒为
False;签发附加 key 时记审计 `api_key_issued`(不再记
`api_key_rotated`)。key 明文只在回调成功页/响应里出现一次,
丢了只能重新走一次 OAuth 登录拿新 key(旧 key 不受影响)。
- API keys 管理(全部只操作认证用户自己的 key,须持本站 key):
`GET /users/me/keys`(列出 primary(id 为 "legacy")+ 附加 key,
含 label、后 4 位提示、创建/最近使用/撤销时间,绝不返回明文
与哈希)、`POST /users/me/keys`(body 可含 label,签发附加 key,
明文只在本次响应里出现一次)、`DELETE /users/me/keys/{id}`
(撤销一个 key,primary 用 id "legacy",无此 key 或已撤销返回
404)、`POST /users/me/keys/revoke-others`(撤销除本次请求 key
之外的全部自己的 key,返回撤销数)。附加 key 认证成功时更新
last_used_at,但每小时最多写一次(认证是热路径)。
- 已有本站账号的绑定流程(已实现):持本站 key 调
`POST /oauth/{provider}/bind/initiate`(body 含 client_id +
redirect_uri),返回 `{provider, state, authorization_url}`,