授权范围检查看什么
OAuth 2.0 的 scope 是应用能做什么的声明,真正的风险点在于服务端是否按 scope 强制校验,以及应用是否申请了超出功能需要的权限。常见问题包括:注册即拿到高权限 scope、同意页不提示将要获得的权限、令牌拿去调用范围外接口仍被接受。
基本信息
| 适用平台 | 自建 OAuth 2.0 / OIDC 授权服务器与第三方开放平台 |
|---|---|
| 参考规范 | RFC 6749(授权框架)、RFC 9700(安全最佳实践) |
| 检查对象 | scope 粒度、同意页提示、令牌范围校验、令牌泄露面 |
| 验证方式 | 走查自有应用授权流程并核对接口权限 |
典型使用场景
- 第三方应用接入评审:确认申请的 scope 是否最小化
- 排查低 scope 令牌越界调用高敏接口的问题
- 核查同意页是否明示将要授予的权限
- 检查授权码是否与 client_id、redirect_uri 强绑定
- 评估令牌存储位置与泄露后的影响面
检查步骤
检查步骤
1. 记录每个业务功能实际需要的 scope 集合(对照开发文档)
2. 用低 scope 令牌调用高敏接口(如改密、导出),观察服务端是否按 scope 拒绝
3. 检查同意页文案是否列明将要获得的权限,而不是笼统一句“获取基本信息”
4. 检查授权码使用次数限制与 redirect_uri 精确匹配配置
5. 输出越界接口清单与 scope 收敛建议检查点与常见问题
| 检查点 | 期望实现 | 常见问题 |
|---|---|---|
| scope 粒度 | 按功能拆分,敏感操作独立 scope | 统一一个全权 scope |
| 服务端校验 | 接口按 scope 逐项鉴权 | 只在授权时校验、调用时不校验 |
| 同意页 | 明示权限与实际范围 | 提示含糊或默认全选 |
| 授权码 | 一次性 + 绑定 redirect_uri | 可重复使用或校验宽松 |
| 令牌存储 | 服务端安全存储,前端不落地长期令牌 | 令牌写入日志或前端本地存储 |
修复视角:scope 与接口权限在服务端强绑定,敏感操作要求独立的高敏 scope;授权码必须一次性且严格匹配回调地址。
不要使用真实用户正在进行的授权会话做越界测试,会影响他人授权状态;测试统一走自有应用与测试账号。