工作原理
客户端在授权端点请求以空格分隔的 scope 字符串。授权服务器可以在同意页展示这些范围、将其缩小,并把最终授权的集合写入访问令牌。资源服务器在处理每个操作前必须检查令牌的 scope 声明。scope 只是名称,其含义来自 API 文档和实际的强制校验代码。
使用场景与权衡
scope 适用于委派访问、第三方集成和最小权限令牌。只读看板应请求 orders:read,而不是 orders:admin;即使令牌拥有 orders:read,也必须校验订单是否属于当前用户。scope 与角色不同:角色描述用户在租户内的身份,scope 限制某个客户端令牌能做什么。粒度过细会增加同意页负担和令牌体积,过粗则把授权判断推回业务代码。修改 scope 名称属于破坏性 API 变更,应谨慎设计并版本化。
示例与误区
GET /authorize?response_type=code&client_id=app1
&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcb
&scope=profile%20orders%3Aread HTTP/1.1
令牌响应包含 "scope": "profile orders:read";调用 POST /orders 而缺少 orders:write 时应返回 403 insufficient_scope。scope 不能证明用户身份,身份认证应使用 OpenID Connect;授予 scope 不等于执行校验,通配符 * 会破坏最小权限。相关概念包括 OAuth 2.0 PKCE、OpenID Connect 和最小权限。