首页/开发/软件测试速查/OAuth2 流程测试

OAuth2 流程测试

OAuth2 授权码流程的测试要点:授权跳转与 state 校验、回调换 token、scope 最小化、令牌过期与刷新、撤销后失效;测试环境使用独立 client 与固定回调地址。

软件测试速查开发更新于 2026-10-13

OAuth2 测试是什么

OAuth2 测试围绕授权流程与令牌博弈展开:授权码流程(含 PKCE 的 code_challenge 与 code_verifier 校验)、令牌端点(code 换 token、refresh 换 token)、以及一串拒绝路径——code 复用、redirect_uri 不匹配、过期令牌、scope 不足。规范依据是 RFC 6749(授权框架)、RFC 7636(PKCE)与 RFC 6750(Bearer 令牌)。

基本信息

标准流程authorize 取 code,换 token,携带令牌访问资源,过期后刷新
PKCE客户端存 code_verifier,授权时传哈希,换令牌时传原值核验
拒绝路径code 一次性、redirect_uri 严格匹配、state 防跨站请求伪造
令牌测试过期、篡改、撤销、刷新轮换后旧令牌必须失效
权限校验scope 在资源端强制,不能只靠前端隐藏入口
测试入口脚本直打令牌端点,或用 Postman 集合驱动全流程

换令牌请求示意

换令牌请求示意
# 授权码换令牌(PKCE:带上 code_verifier 原值)
curl -s -X POST https://auth.example.com/token \
  -d grant_type=authorization_code -d code=$CODE \
  -d redirect_uri=https://app.example.com/cb \
  -d code_verifier=$VERIFIER -d client_id=web
# 期望 200 加 access_token;同一 code 再请求一次应返回 400 invalid_grant

典型使用场景

  • 登录对接验收:授权码到令牌的完整链路
  • 安全拒绝测试:code 复用、state 缺失、redirect 篡改
  • 令牌生命周期:过期、刷新轮换、撤销后立即失效
  • 越权验证:低权限令牌访问高权限接口应被拒绝
  • 登出闭环:前端登出后后端令牌同步失效
  • 多客户端场景:网页、App、服务端各自流程差异

测试点与预期

测试点预期结果核对
正确 code 换 token200 返回 access_token令牌可访问资源
code 二次使用400 invalid_grant一次性语义成立
redirect_uri 不匹配拒绝并记录无开放跳转风险
篡改令牌401签名与格式校验
过期 access401 且可用 refresh 续期续期链路可用
scope 不足403资源端强制校验
拒绝路径比成功路径更值得测:OAuth2 事故多数出在校验缺失——state 没验、redirect 宽松、code 可复用。先测「不该通过的能不能真拦住」。
别在共享或生产授权服务器上刷失败用例:风控可能锁定账号或加验证码,用独立测试租户与账号。
PKCE 校验要检查哈希算法一致性:明文 challenge 或错误的验证顺序都会让「看似可用」的流程留下安全隐患。

易错点

  • 只测成功流程:安全校验没人验证,上线即留洞
  • PKCE 用明文 challenge:看似跑通实则没验哈希,防护形同虚设
  • scope 只在前端隐藏入口:直接调 API 仍可越权,资源端必须强制校验
  • 刷新轮换后旧 refresh 不失效:被盗令牌长期可用,检测手段缺失
  • state 缺失或不校验:跨站请求伪造窗口一直开着

数据来源与参考

  • RFC 6749(OAuth 2.0 授权框架)
  • RFC 9700(OAuth 2.0 Security Best Current Practice)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌