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