3. 授权测试基础:OAuth2.0、JWT、Session-Cookie 三种授权模式原理
在 Testing 框架 下进行授权测试前,必须理解三种主流授权模式的底层原理。本章从凭证存储位置、签名机制、生命周期三个维度拆解 Session-Cookie、JWT、OAuth2.0 的核心差异,并给出测试场景中的关键验证点。
3.1 三种授权模式核心对比
| 维度 | Session-Cookie | JWT (JSON Web Token) | OAuth2.0 |
|---|---|---|---|
| 凭证存储 | 服务端内存/Redis,客户端仅存 Session ID | 客户端持有完整 Token,服务端无状态 | 授权服务器颁发 Access Token / Refresh Token |
| 签名机制 | 无签名,依赖服务端 Session 映射 | HMAC 或 RSA 签名,防篡改 | 授权码 + Client Secret / 私钥签名 |
| 生命周期 | Session 超时 / 主动销毁 | Token 内嵌过期时间 (exp) | Access Token 短时效 + Refresh Token 长时效 |
| 跨域能力 | 弱,需共享 Session 存储 | 强,Token 可跨域传递 | 强,支持第三方应用授权 |
| 测试关注点 | Cookie 劫持、Session 固定、CSRF | 签名算法、Payload 篡改、过期验证 | 授权码泄露、Redirect URI 校验、Scope 越权 |
测试原则: 无论哪种模式,Testing 框架下必须覆盖 凭证伪造、过期重放、越权访问 三类基础用例。
3.2 Session-Cookie 模式原理与测试要点
服务端生成唯一 Session ID,通过 Set-Cookie 写入浏览器;后续请求自动携带 Cookie,服务端根据 Session ID 查找用户状态。该模式有状态,扩展时需共享 Session 存储(如 Redis)。
测试陷阱: 检查服务端是否校验 Cookie 的
HttpOnly、Secure、SameSite 属性。缺少 HttpOnly 可能导致 XSS 窃取 Session ID。
3.3 JWT 模式原理与测试要点
JWT 由 Header、Payload、Signature 三部分组成,以 Base64URL 编码后通过 . 连接。服务端只需验证签名即可信任 Payload 内容,无需查询数据库,实现无状态授权。
// JWT 结构示例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
| 部分 | 内容 | 测试验证点 |
|---|---|---|
| Header | 签名算法 (alg)、Token 类型 (typ) | 是否支持 alg: "none" 攻击?是否限制算法白名单? |
| Payload | 声明 (claims):sub、exp、iat、role 等 | 篡改 Payload 后签名是否失效?exp 过期是否严格校验? |
| Signature | 对 Header + Payload 的签名 | 密钥是否硬编码?是否可被暴力破解? |
高危测试项: 修改 JWT 的
alg 为 none 并移除签名部分,若服务端未校验算法白名单,可直接伪造任意用户身份。这是 JWT 实现中最常见的漏洞之一。
3.4 OAuth2.0 模式原理与测试要点
OAuth2.0 是一种授权框架,核心是让第三方应用在用户授权后获取有限的资源访问权限。最常用的流程是 授权码模式 (Authorization Code Flow),涉及四个角色:资源所有者(用户)、客户端(第三方应用)、授权服务器、资源服务器。
3.5 Testing 框架下的授权测试清单
- Session-Cookie 测试项
- Cookie 是否设置
HttpOnly、Secure、SameSite=Lax/Strict - Session ID 是否可预测(随机性测试)
- Session 固定攻击:登录前后 Session ID 是否变更
- CSRF Token 是否与 Session 绑定
- Cookie 是否设置
- JWT 测试项
alg: none攻击验证- HMAC 密钥强度测试(弱密钥爆破)
- Payload 篡改后签名校验是否生效
exp过期 Token 是否被拒绝- Refresh Token 轮换机制是否生效
- OAuth2.0 测试项
- 授权码是否一次性使用(重放攻击)
- Redirect URI 是否被严格校验(开放重定向)
- Client Secret 是否硬编码在客户端
- Scope 越权:使用低权限 Token 访问高权限接口
- CSRF 攻击:授权码绑定 state 参数是否强制校验
自动化测试建议: 在 Testing 框架中,将上述测试项封装为 授权测试套件 (Auth Test Suite),每次部署后自动执行。重点关注 Token 伪造 和 越权访问 两类高危用例。