← 中文资源

简体中文版本

OAuth 作用域(Scopes)

OAuth 作用域是以空格分隔的字符串,用于申请和限制委派访问。资源服务器必须强制执行,作用域本身不认证用户。

阅读英文原文

工作原理

客户端在授权端点请求以空格分隔的 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 和最小权限。