Cloudflare 的可选 OAuth 作用域让同意范围更窄,但不会自动变得安全

Cloudflare 现在允许用户为 Wrangler 和 MCP 客户端拒绝可选 OAuth 作用域,但必需权限、令牌处理和工具行为仍是独立风险。

分享这篇文章

Cloudflare 现在允许用户在授权 Wrangler 或 Cloudflare API Model Context Protocol(MCP)服务器时拒绝可选的 OAuth 权限。访问令牌只包含用户批准的作用域。这是一项有用的最小权限控制,尤其是在代理客户端能够调用超出当前任务范围的工具时。

这并不是自动实现的最小权限。Cloudflare 默认仍会选择完整的请求集合,同意时不能关闭必需作用域,而客户端必须检查获授予的作用域,不能假定每个请求都成功。因此,运营层面的测试很简单:拒绝当前任务不需要的每一项权限,然后证明允许的工作仍然成功,且被拒绝的工作会干净地停止,直到用户有意重新授权。

可选作用域改变授权,而不是客户端的可信度

Cloudflare 的 8 月 22 日变更日志将新的同意控制应用于 Wrangler 和 Cloudflare API MCP 服务器。更广泛的 OAuth 发布说明又补充了两个对实现者很重要的细节。

首先,必需和可选标签只在该授权流程请求的作用域中评估。一个配置了四种能力的客户端可能会为狭窄任务请求其中两种;只有这两个作用域会出现,并在这次授权中被分类。其次,令牌响应反映用户的实际选择。请求了四个作用域却只收到两个的客户端,必须使用这两个作用域运行,不能把差异视为授权服务器错误。

这些官方页面确立了已宣布的行为,但没有为当前 Wrangler 或 MCP 客户端组合提供独立的兼容性结果。因此,下面的矩阵是一项要运行的验收测试,而不是声称每个现有客户端都已经正确处理了部分授权。

这里有三个相互独立的决定:

决定谁控制要验证什么
客户端可以请求哪些作用域配置 OAuth 客户端时的客户端所有者配置的集合不包含超出产品文档化用途的能力
配置的作用域中哪些是必需的客户端所有者只有客户端启动并说明自身所需的最小能力集合才是强制的
请求的可选作用域中哪些进入这次授权授权流程的人同意屏幕与当前任务相符,且应用记录返回的作用域集合而不记录令牌

这项功能主要改进第三个决定,并为客户端所有者提供第二个决定的机制。它无法挽救把广泛写入权限标为必需的客户端。Cloudflare 的客户端配置指南称,默认情况下所有选定的作用域都是必需的;所有者必须明确将其中一部分标记为可选。

Wrangler 暴露了一个相关但不同的控制。命令文档允许操作员在登录时请求选定的作用域集合,但在没有提供作用域标志时,会使用所有可用作用域。请求更少的作用域会缩小进入同意页面的范围。取消选择可选作用域会缩小授权服务器实际授予的范围。最小权限审查应测试两条路径,而不能把新的同意页面当成狭窄请求的替代品。

被拒绝的作用域同样在测试客户端和授权服务器

在部分同意下,请求的作用域和获授予的作用域不同是预期行为。关键问题是,客户端是否从返回的授权中推导可用工具,还是假定每项请求的权限都已获批准。行为良好的客户端可以保留基本功能、隐藏不可用操作,并通过重新授权让之后的权限增加变得可见。行为不佳的客户端则可能把用户选择变成通用错误、部分副作用,或悄悄尝试重新获得更广泛的访问权。

客户端的可见性并不能解决这个问题。Cloudflare 称,私有客户端只能由父账户成员授权。公共客户端需要发布者域验证,但 Cloudflare 的授权指南提醒,域验证确立的是对显示域名的控制,而不是应用安全。

Cloudflare 表示,后来变得必要的已拒绝作用域需要重新授权。第二次同意事件正是这项功能的意义:它让用户看到任务发生了变化,并决定新增能力是否合理。

可选同意并不会封闭 OAuth 或代理边界的其他部分

更小的令牌会限制该令牌可以授权的内容,但不能证明授权流程、令牌存储、客户端行为或下游工具是安全的。

  • 必需作用域越界仍然是越界。 用户无法取消选择必需作用域。如果客户端没有某项权限也能执行基本功能,就应将该权限归为可选,或不要请求它。
  • 默认范围仍然很广。 Cloudflare 默认选择请求的可选权限。没有编辑就直接点击通过的人会收到完整的请求集合,因此客户端必须从狭窄请求开始,不能依赖每个用户主动删减。
  • 授权流程安全是另一回事。 Cloudflare 为浏览器、移动端、桌面端和命令行公共客户端记录了带 PKCE 的 Authorization Code。IETF 的当前 OAuth 安全最佳实践也要求公共客户端使用 PKCE,并精确匹配已注册的重定向 URI。可选作用域无法阻止授权码拦截、重定向错误或跨站请求伪造。
  • 凭据处理是另一回事。 无论是两个作用域还是二十个作用域,bearer 令牌都需要同样的保护。Wrangler 当前文档提供操作系统钥匙串存储;日志、issue 评论、工作表、提示词和模型上下文应包含作用域名称及非秘密证据,绝不能包含令牌或刷新凭据。
  • 安全授权也可能驱动不安全工具。 可选作用域不会验证 MCP 工具参数、不会将操作绑定到用户当前意图、不会阻止混淆代理路径,也不会在破坏性调用前增加批准步骤。工具级验证、账户和资源边界、人工确认及恢复控制仍然必要。
  • 作用域名称本身不能衡量后果。 一个写入作用域可能比十个读取作用域更危险。审查每个名称背后的资源、账户、操作、数据敏感度、可逆性和下游副作用。

这与 MCP 路线图分析(中文)背后的区别相同:文档确立了某种可用机制,而已部署的客户端—服务器组合决定实际行为。Claude Skills API 分析(中文)将同一规则应用于可复用的代理包。

Cloudflare 的变更让部分 OAuth 同意成为 Wrangler 和 MCP 客户端的一项可用控制。证明不在于新的“编辑权限”按钮,而在于测试运行:被拒绝的能力持续处于被拒绝状态,有用的工作继续进行,而新增权限不会在没有另一次有意授权的情况下出现。

资料来源

  1. Cloudflare changelog: Choose OAuth scopes for Wrangler and the Cloudflare API MCP server
  2. Cloudflare: From all-or-nothing to task-based OAuth consent
  3. Cloudflare OAuth client configuration documentation
  4. Cloudflare application authorization documentation
  5. Cloudflare Wrangler general commands documentation
  6. IETF RFC 9700: Best Current Practice for OAuth 2.0 Security