Allow three OAuth consent levels and cache agent permission checks

This commit is contained in:
陈煜 committed 2026-10-05 21:35:37 +08:00
1 parent 794274d31b
commit daf9b458af
10 files changed
+245 -22

No files matched your search

+5 -1
View File
@@ -126,7 +126,7 @@ cd E:\WorthPath
### 客户端请求范围与最终授权
本机 Codex CLI 0.160.0 实测:显式 login --scopes read,draft 只请求两项;不指定 scopes 的默认登录请求全部五项。请求范围是候选权限,不是已经授予的权限。授权页可选择只读、草稿或直接写入;隐藏读写默认关闭。页面分别展示候选和最终范围,服务端验证选择是请求子集,再用所选 scopes 覆盖待处理参数并发行令牌。
本机 Codex CLI 0.160.0 实测:显式 login --scopes read,draft 只请求两项;不指定 scopes 的默认登录请求全部五项。请求范围是候选权限,不是已经授予的权限。授权页可选择只读、草稿或直接写入;隐藏读写默认关闭。页面分别展示候选和最终范围,2026-10-05 起,普通权限等级由用户在网页明确选择,可高于客户端申请范围;隐藏权限仍限于客户端申请范围。服务端用最终选择的 scopes 覆盖待处理参数并发行令牌。
申请草稿模式时选择“草稿修改(网页确认)”,不勾选隐藏账户;最终将授予应显示 read,draft。授权后用 connection_info 核对实际 scopes 仅有两项、readHidden/writeHidden 均 false。不要仅因默认请求包含全部候选权限就停止登录,最终批准仍由用户完成。
@@ -153,3 +153,7 @@ NETWORK_ALLOW_HTTP=true 时支持配置的 HTTP MCP 服务和网页审核地址
`movement_create` 的 repay 从资产账户付款,目标支持借入债务和信用卡等负债账户。账户超额还款记为溢缴存款;独立债务仍拒绝超额还款。原币本金用 amount/received,fee 为负表示优惠、为正表示手续费;保留 repay 类型,双边余额及历史在同一事务提交,记录可编辑和撤销。
本次通过 57 项单元测试、9 项隔离 MySQL/REST/官方 SDK 集成测试、类型检查及生产构建;网页验证权限编辑表单、还款草稿预览、默认 admin 删除入口与余额颜色。详见 [更新验收](update-connections-repayment-users-2026-10-05.md)。
### OAuth 三档选择与助手权限缓存
OAuth 即使只申请 read,网页也提供只读、草稿与直接写入,默认只读,由用户确认最终等级;只读用户不能授予写入,隐藏访问仍需申请并勾选。助手在连接时检查一次 connection_info 并缓存;权限可能在网页更改,重新连接/授权、用户通知变更、权限错误或缓存不足时再检查一次,无需逐次操作重复检查。服务端继续逐请求验证实际权限。教程、配置提示词及其保存规则均已同步,见 [本次更新](update-oauth-permissions-2026-10-05.md)。
@@ -0,0 +1,27 @@
# OAuth 三档权限选择与权限缓存提示词
完成时间:2026-10-05 21:34(UTC+8)。
OAuth 授权页始终提供只读查询、草稿修改和直接写入三个等级,默认只读。即使客户端只申请 read,普通用户也可以在网页主动选择 draft 或 write,服务端按明确确认的范围发行令牌,并在 token.scope 返回实际范围。选择直接写入后显示即时写入说明,不自动替用户选择或确认。
隐藏读写仍要求客户端申请对应范围并由用户勾选。只读系统用户能看到三档说明,但草稿和直接写入不可选;服务端也拒绝授予写入。刷新令牌仍不能自行扩大范围,授权有效期和撤销规则保留。
授权预览新增 availableScopes 和 canWrite,scopes 保留客户端原申请,页面区分“客户端申请权限”与“最终权限代码”。三档权限互斥,draft/write 不同时授予。
## 提示词
页面的“Agent 使用教程”和“Codex 配置提示词”现在明确:
- 连接时发现真实工具,调用一次 connection_info 核对当前资源、权限、scopes 与隐藏读写,并在本连接中缓存。
- 权限可能在网页更改,旧申请或聊天中的权限不代表当前授权。
- 不需要每次查询或写入前检查;重新连接/授权、用户告知变更、权限错误或缓存不足以判断可执行范围时,再检查一次并更新缓存。
- 初次配置仍核对本次预期范围;不匹配时报告差异,不擅自申请更高权限或绕过真实 pending 的人工确认。
- 缓存是助手的查询策略;服务端每次请求仍检查实际授权、有效期、撤销状态和用户权限。
## 验证
7 项隔离 MySQL/HTTP/官方 SDK 集成测试通过,包括客户端仅申请 read 时分别确认三档权限、令牌 scope 正确、默认只读、只读用户拒绝写入、隐藏权限约束、原有 OAuth/刷新与业务回归。前后端生产构建通过。
独立临时数据库网页验收显示三个可选按钮,选择直接写入后最终授权与说明同步变化。未点击真实用户 OAuth 确认,也未改变线上连接或账目。清理测试库、服务和一次性脚本;保留可重跑回归测试。截图保存在仓库外,docs 无图片。本次没有数据库结构变更。
本地提交,不推送、不部署。已有 compose.yaml 和 docker.md 改动保留。