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)。

Session-Cookie 授权流程 客户端 (浏览器) 服务端 Session 存储 ① POST /login (用户名+密码) ② 创建 Session ③ Set-Cookie: SESSIONID=abc123 ④ 请求携带 Cookie → 服务端查询 Session ⑤ 返回用户数据
测试陷阱: 检查服务端是否校验 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 无状态授权流程 客户端 服务端 ① POST /login (用户名+密码) ② 返回 JWT (Access Token) ③ Authorization: Bearer <JWT> → 验证签名 ④ 返回受保护资源
高危测试项: 修改 JWT 的 alg 为 none 并移除签名部分,若服务端未校验算法白名单,可直接伪造任意用户身份。这是 JWT 实现中最常见的漏洞之一。

3.4 OAuth2.0 模式原理与测试要点

OAuth2.0 是一种授权框架,核心是让第三方应用在用户授权后获取有限的资源访问权限。最常用的流程是 授权码模式 (Authorization Code Flow),涉及四个角色:资源所有者(用户)、客户端(第三方应用)、授权服务器、资源服务器。

OAuth2.0 授权码模式流程 用户 客户端 授权服务器 资源服务器 ① 访问应用 ② 重定向到授权服务器 ③ 用户登录并授权 ④ 回调 URL 携带授权码 ⑤ POST /token (授权码 + Client Secret) ⑥ 返回 Access Token + Refresh Token ⑦ 携带 Access Token 请求资源 ⑧ 返回受保护资源

3.5 Testing 框架下的授权测试清单

  • Session-Cookie 测试项
    • Cookie 是否设置 HttpOnly、Secure、SameSite=Lax/Strict
    • Session ID 是否可预测(随机性测试)
    • Session 固定攻击:登录前后 Session ID 是否变更
    • CSRF Token 是否与 Session 绑定
  • JWT 测试项
    • alg: none 攻击验证
    • HMAC 密钥强度测试(弱密钥爆破)
    • Payload 篡改后签名校验是否生效
    • exp 过期 Token 是否被拒绝
    • Refresh Token 轮换机制是否生效
  • OAuth2.0 测试项
    • 授权码是否一次性使用(重放攻击)
    • Redirect URI 是否被严格校验(开放重定向)
    • Client Secret 是否硬编码在客户端
    • Scope 越权:使用低权限 Token 访问高权限接口
    • CSRF 攻击:授权码绑定 state 参数是否强制校验
自动化测试建议: 在 Testing 框架中,将上述测试项封装为 授权测试套件 (Auth Test Suite),每次部署后自动执行。重点关注 Token 伪造 和 越权访问 两类高危用例。