← 文章 / AI技术
InfoQ 5小时前 · 2026-09-08 11:46:41 · 5 阅读

Cloudflare 新增可选 OAuth 权限范围,允许开发者标注用户可能拒绝的权限

Cloudflare 新增了可选 OAuth 权限范围,允许用户在授权界面中取消勾选单个权限,而非直接批准或拒绝应用程序的全部请求。客户端所有者可以标记哪些权限范围可以取消。该公司将 MCP 服务器作为这一功能的典型应用场景。

该功能所针对的是智能代理所特有的问题。围绕少数几个权限范围构建的应用程序,可以在授权界面上描述其访问需求,用户也能据此做出合理的判断。但智能代理却无法做到这一点。正如 Cloudflare 所言,MCP 服务器可能会请求一组广泛的权限,因为理论上,智能代理可以使用其中所有权限,而大多数用户并不希望智能代理拥有如此大的访问权限。

在实际应用中,这一差距显而易见。一个用于读取库存进行产品比较的智能代理,并不需要修改价格的权限;一个用于查询订单状态的智能代理,并不需要办理退款的权限;一个在调研过程中读取供应商记录的智能代理,并不需要支付访问权限。这种关联暴露了智能代理可能执行的所有操作的集合,而授权界面却要求用户一次性批准所有这些权限。

专注于人工智能和开发工具领域的软件工程师 Umesh Malik 描述了由此产生的困境:

这让开发者面临两个两难的选择:要么请求最少的权限,从而导致高级用例无法实现;要么请求所有权限,眼睁睁看着用户跳过授权界面。

此前,Cloudflare OAuth 对此采取的处理方式是“全有或全无”。客户端可以请求其配置的权限范围中的一部分,但一旦提出请求,用户只能选择全部批准或全部拒绝。希望实现更精细控制的开发者,会在审批流程之前构建一个自定义的权限选择界面。

现在,客户端所有者在配置 OAuth 客户端时,可以在现有列表旁边使用 optional_scopes 数组将某些范围标记为可选:

"scopes": [  "user-details.read",  "workers-scripts.write",  "workers-kv-storage.write",  "zone.read"],  "optional_scopes": [  "workers-kv-storage.write",  "zone.read"]
复制代码

有一个细节决定了具体的行为。必选和可选权限范围是根据特定授权流程中请求的范围来评估的,而非根据客户端上配置的内容。如果一个客户端配置了四个权限范围,但这次仅请求其中的两个,那么用户在授权界面上就只会看到那两个。未主动适配该规则的客户端将保持其当前行为不变,而且授权界面默认仍然会授予所请求的全部权限。

部分同意并非什么新概念,Cloudflare 也不是首个提供此功能的厂商。GitHub 的文档指出,用户可以编辑其权限范围,授予应用程序的访问权限少于请求的范围,并建议开发者处理这种情况,而不是默认授予全部权限。谷歌针对非登录权限提供了细粒度的复选框。Microsoft Entra 支持增量同意,已授予的权限会显示在令牌的 scp 声明中。

Cloudflare 的新增功能旨在让开发者能够控制哪些权限可以移除。另一方面,用户拥有单方面决定权,而应用程序则在运行时才会得知结果。如果某个范围被标记为“必需”,则意味着用户在缩小请求范围时也无法移除应用程序正常运行所必须的权限,这与单纯希望用户不要移除这些权限是截然不同的。

这一切都不需要修改 OAuth。RFC 6749 早已允许授权服务器签发范围比请求更窄的令牌。变化在于,随着智能代理集成使得宽泛的权限请求成为常态,提供商开始在授权界面中明确展示这种灵活性。

对开发者而言,这意味着有一项假设不再成立。当用户取消选择某个可选范围时,访问令牌会只包含已授予的权限。应用程序必须在交换授权码后检查令牌响应中的范围参数,而不是默认申请成功即意味着所有权限均已授予。基于旧行为编写的代码,在预期应正常运行的调用中将会遇到授权错误。

Cloudflare 的指导原则是“降级处理而非报错”。如果某个应用程序失去了写入权限,则应禁用该功能并明确告知用户,而不是返回 403 错误——这会让用户误以为是集成故障。

就智能代理而言,这形成了一种设计模式:要求对自己查询的任何内容都具备读取权限,而将写入权限设为可选,在执行操作前检查已授予的权限集,并在权限不足时干净利落地停止操作,而不是试图绕过权限限制。一个仅在获得明确许可时才能读取团队 Workers 脚本并向其写入数据的智能代理,其风险特征与在首次接触时就要求获得完全写入权限的智能代理截然不同。

此次发布是针对同一问题不同方面的一系列举措之一。MCP 2026-07-28 规范收紧了客户端授权要求,优先支持预注册客户端和客户端 ID 元数据文档,同时弃用了动态客户端注册。微软托管的 Azure DevOps MCP 服务器已经正式发布,但不支持 Claude、ChatGPT 或 Cursor,因为 Entra 缺乏这些客户端所需的客户端注册机制。第三个关键点是授权粒度:重点不在于智能代理的身份,也不在于哪些客户端可以连接,而在于用户必须授予多少权限才能使其正常运行。

Cloudflare 报告称,自 6 月以来,数千个第三方 OAuth 应用已经生成了超过 100 万次授权。该公司表示,将在未来几周内扩展账户和区域级角色,以便覆盖几乎所有产品,并新增 API 令牌角色、账户成员资格选项以及 OAuth 权限范围。

原文链接:https://www.infoq.com/news/2026/09/cloudflare-optional-oauth-scopes/

原始来源: InfoQ

评论 (0)