首页/安全/渗透测试与安全评估速查/OAuth 授权范围与同意页检查
常见漏洞验证121 条

OAuth 授权范围与同意页检查

检查授权范围是否最小化、同意页是否明示权限、令牌是否可被范围外接口使用;常见问题是注册即拿高权限。

授权范围检查看什么

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;授权码必须一次性且严格匹配回调地址。
不要使用真实用户正在进行的授权会话做越界测试,会影响他人授权状态;测试统一走自有应用与测试账号。

易错点

  • 只核对文档里的 scope 定义,不验证服务端是否真的强制执行,结论与实际不符
  • 在真实用户授权会话上测试越界调用,影响他人授权与令牌状态
  • 忽略隐式流与移动端自定义协议回调,这类实现的回调地址校验通常更松
  • 只测单个接口就下结论,未覆盖导出、改密这类高敏接口
  • 把“令牌在有效期内”等同于“权限正确”,忽略 scope 与权限的映射错误

数据来源与参考

  • RFC 6749
  • RFC 9700
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌