- 文档
- 教程
- 知识库
【免费下载链接】developer-roadmap
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
本篇指南以 developer-roadmap 仓库的 API 设计路线图(roadmaps/api-design/content/scopes--permissions@qjawwRcMl2-IDwk8ExpPL.md)为核心骨架,系统讲解 API 设计中 Scopes(授权范围)与 Permissions(权限)的核心概念、设计方法、实现要点及其与 OAuth 2.0、API Key、JWT 等主流授权机制的配合方式。读完本文,你将掌握如何用 scopes 实现"最小权限"授权、如何为 API 端点设计 scope 命名体系、如何评估泄露密钥的爆炸半径,并能在自己的 API 项目中落地一套可审计、可扩展的权限模型。
一、什么是 Scopes:从"一把万能钥匙"到"一串受限凭证"
在 API 设计中,scope(授权范围)是附加在 API Key 或访问令牌(access token)上的一组标签(labels),它声明了该凭证被允许执行的操作集合。与传统的"单把万能钥匙"(一个密钥拥有全部权限,all-or-nothing)不同,scopes 允许你签发细粒度(fine-grained)访问权限的凭证。
以文档中的典型例子说明:一把带orders:readscope 的密钥可以读取订单(fetch orders),但不能创建订单,也不能删除订单。也就是说:
orders:read→ 允许读取订单资源;- 未授予
orders:write/orders:delete→ 创建、删除操作将被拒绝。
这种设计直接呼应了安全领域的最小权限原则(Principle of Least Privilege):每个凭证只拥有完成其任务所必需的最小权限集。其直接收益是限制密钥泄露时的爆炸半径(blast radius)——即使某个密钥被泄漏,攻击者能做的也仅限于该密钥 scope 覆盖的操作,无法升级为对整个 API 的完全控制。
二、Scopes 在授权体系中的定位
Scopes 是OAuth 2.0 的核心概念,但它的适用性并不局限于 OAuth——同样适用于纯 API Key 系统。在 developer-roadmap 的 API 设计路线图中,scopes 与权限位于授权(Authorization)主题之下,与以下概念形成完整的知识链条:
- 认证(Authentication)方法:确认"你是谁"(身份验证);
- 授权(Authorization)方法:确认"你能做什么"(权限判定),scopes 是其中一种授权模型;
- OAuth 2.0:将 scopes 作为授权流程中的正式参数;
- RBAC / ABAC / PBAC / ReBAC:基于角色 / 属性 / 策略 / 关系的访问控制模型,与 scopes 互补或叠加;
- Token 认证 与 JWT:承载 scope 声明的常见载体;
- API Key 管理 与 Key 生成与轮换:scopes 在密钥生命周期中的落地环节。
简单地说,认证解决"能不能进",授权(含 scopes)解决"进来后能碰什么"。scopes 属于授权层,是认证之后的第二道闸门。
三、Scope 的典型设计模式
3.1 命名规范:资源 + 动作
业界(包括 OAuth 生态与云服务 API)通行的 scope 命名方式是**"资源:动作"(resource:action)**格式,例如:
| Scope 名称 | 允许的操作 |
|---|---|
orders:read | 读取订单列表与详情 |
orders:write | 创建、更新订单 |
orders:delete | 删除订单 |
users:read | 读取用户资料 |
billing:read | 读取账单信息 |
冒号分隔符让 scope 具备良好的可读性与可解析性,服务端在判定时可以先匹配资源前缀,再匹配动作,便于实现通配、批量授予与审计日志记录。
3.2 粗粒度与细粒度的权衡
- 粗粒度 scope(如
admin、read、write)实现简单,但授权粒度大,泄露风险高; - 细粒度 scope(如
orders:read、invoices:write)更安全、更贴合最小权限原则,但增加了授权管理成本。
实践中建议:面向第三方开发者与机器客户端的 API 优先采用细粒度 scope;面向内部工具可适度放宽,但仍应遵循最小权限原则。
3.3 与 RBAC 的配合
RBAC(基于角色的访问控制,见 RBAC 文档)将权限赋予"角色",再把角色赋予用户;而 scopes 则直接绑定在凭证(key/token)上。两者常组合使用:
- 用户维度:用 RBAC 根据岗位职能(如"客服""财务""管理员")决定其角色;
- 凭证维度:用 scopes 决定某个具体 API Key 能调用哪些端点。
例如一个"客服"角色可能拥有orders:read+customers:read,而不会拥有billing:write。这种"角色定边界、scope 定凭证"的组合,既简化了安全运维(按职能分配而非逐人分配),又保留了凭证级的最小权限控制。
四、Scopes 在 OAuth 2.0 中的角色
在 OAuth 2.0 授权框架中,scopes 扮演着正式且核心的角色。OAuth 2.0 定义了四个角色:
- 资源所有者(Resource Owner):拥有受保护资源(用户账号)的主体;
- 客户端(Client):代表资源所有者请求访问的第三方应用;
- 资源服务器(Resource Server):托管受保护资源的服务,负责校验令牌;
- 授权服务器(Authorization Server):认证资源所有者并签发访问令牌。
在授权码(Authorization Code)、客户端凭证(Client Credentials)等流程中,客户端在发起授权请求时通过scope参数声明所需权限范围;授权服务器在签发的访问令牌中只包含被批准的 scopes。资源服务器在响应 API 调用时,依据令牌中的 scope 判定是否放行。
这一机制使得"用户授权第三方应用有限访问自己的账号"成为可能——例如一个外卖聚合应用可以只申请orders:read来获取订单数据,而无权修改用户账单。
五、在 API Key 系统中落地 Scopes
Scopes 同样适用于纯 API Key 系统(见 API Keys & Management)。落地要点如下:
5.1 创建密钥时绑定 scope
在签发 API Key 时,由管理员或自助控制台为密钥勾选允许的 scope 集合。例如:
{ "key_id": "ak_live_8f3a...", "scopes": ["orders:read", "users:read"], "created_at": "2026-10-04T00:00:00Z", "expires_at": "2027-10-04T00:00:00Z" }5.2 请求校验流程
服务端在每次请求中按如下顺序执行(示意伪代码):
1. 提取凭证(Authorization 头或 API Key 参数) 2. 认证:凭证是否有效、未过期、未被吊销 3. 定位目标端点所需的最小 scope(如 orders:create 需要 orders:write) 4. 授权:校验凭证的 scope 集合是否包含目标 scope 5. 放行或返回 403 Forbidden5.3 哈希存储与密钥轮换
结合 Key Generation & Rotation 文档的要点:
- 生成:密钥应足够随机且足够长,以抵抗暴力破解(建议使用 CSPRNG 生成高熵随机串);
- 存储:密钥在服务端应以哈希形式存储(at rest hashing),明文密钥仅在创建时展示一次;
- 轮换:支持按计划或在疑似泄露后无缝轮换密钥,新旧密钥并行期避免消费者停机;
- 最小化:密钥的 scope 应缩到其任务所需的最小集合——这正是本文核心主题在密钥管理中的具体体现。
六、最佳实践清单
综合原文档与路线图相关模块,一份可操作的 scopes & permissions 实践清单如下:
- 默认拒绝:未显式授予的 scope 一律拒绝,杜绝"未声明即全部允许";
- 按最小权限签发:为每个客户端/密钥单独评估所需 scope,不共用超级管理员密钥;
- 规范命名:统一
资源:动作格式,保持可读、可解析、可审计; - 分离认证与授权:认证通过后,每次请求仍须重新校验 scope;
- 密钥生命周期管理:结合哈希存储、过期时间与定期轮换,泄露后能及时吊销;
- 审计与监控:记录"哪个 scope 被哪个密钥用于哪些操作",异常访问可追踪;
- 范围最小化至上:记住核心目标——限制爆炸半径:一旦密钥泄露,损失被限定在其 scope 之内。
七、进一步阅读
本主题是 API 设计路线图中"授权与安全"知识链的一环,可继续深入以下仓库内文档:
- OAuth 2.0 授权框架:scopes 的正式协议载体与四种角色;
- API Keys & Management:密钥的签发、治理与监控;
- Key Generation & Rotation:密钥生成、哈希存储与无缝轮换;
- RBAC 角色访问控制:基于角色的授权模型,与 scopes 组合使用;
- Token 认证 与 JWT:承载 scope 声明的常见载体与实现;
- Authorization Methods:Basic Auth、OAuth、JWT、API Key 等授权方法的选型对比;
- API Security:API 安全的整体策略与防护范围。
- 文档
- 教程
- 知识库
【免费下载链接】developer-roadmap
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
相关推荐
FastAPI 深入实战:使用 OAuth2 Scopes 实现细粒度权限授权与 API 安全校验
FastAPI 深入实战:使用 OAuth2 Scopes 实现细粒度权限授权与 API 安全校验 本指南基于当前 FastAPI 仓库的官方文档 docs/f
后端Web框架API设计KernelSU App Profile 完全指南:基于最小权限原则的细粒度 Root 权限管理
KernelSU App Profile 完全指南:基于最小权限原则的细粒度 Root 权限管理 App Profile 是 KernelSU 提供的应用级配置
操作系统驱动开发AWS SAM Policy Templates 完全指南:用最小权限原则为 Lambda 配置细粒度 IAM 权限
AWS SAM Policy Templates 完全指南:用最小权限原则为 Lambda 配置细粒度 IAM 权限 本文基于 AWS Serverless A
后端云原生IaC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考