Loading... 🔐 **一、OAuth2 授权流程测试** #### 1. **核心流程验证** - **授权码模式(最常用)**: ```mermaid graph LR A[客户端] -->|1. 请求授权| B(授权服务器) B -->|2. 返回登录页| A A -->|3. 提交用户凭证| B B -->|4. 返回授权码| A A -->|5. 用授权码换Token| B B -->|6. 返回AccessToken/RefreshToken| A ``` - **测试点**: - 步骤4:授权码是否单次有效(使用后立即失效) - 步骤6:响应是否包含 `access_token`、`refresh_token`、`expires_in` #### 2. **异常场景测试** | **测试场景** | **预期结果** | | ----------------------------- | ---------------------------------- | | 错误 `redirect_uri` | 返回 `error=invalid_request` | | 无效 `client_id`/`secret` | 返回 `error=unauthorized_client` | | 过期授权码二次使用 | 返回 `error=invalid_grant` | #### 3. **安全渗透测试** - **CSRF 攻击**:伪造授权请求中的 `state` 参数,验证服务端是否校验匹配性。 - **重定向劫持**: 尝试修改 `redirect_uri` 为攻击者地址,观察是否被拒绝。 --- ### 🪙 **二、JWT 令牌测试** #### 1. **令牌结构校验** 解码JWT([jwt.io](https://jwt.io)),检查三部分: ```json // Header {"alg": "HS256", "typ": "JWT"} // Payload {"sub": "user123", "role": "admin", "exp": 1735689600} // Signature HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) ``` - **关键断言**: - 签名算法是否为强类型(**禁用 `none`**) - `exp`(过期时间)是否生效 #### 2. **令牌有效性测试** | **测试场景** | **预期结果** | | ------------------------------------- | ----------------------------- | | 修改Payload(如 `role=superadmin`) | 接口返回 `401 Unauthorized` | | 使用过期Token访问资源 | 返回 `error=invalid_token` | | 刷新Token获取新AccessToken | 旧Token立即失效 | #### 3. **密钥安全测试** - **弱密钥爆破**:用工具(如 `hashcat`)尝试破解HS256签名。 - **密钥泄露风险**: 验证私钥是否硬编码在客户端(如前端JS)。 --- ### ⚙️ **三、工具化测试方案** #### 1. **基础流程工具** - **Postman**: ```json // 获取Token请求 POST /oauth/token Body: { "grant_type": "authorization_code", "code": "AUTH_CODE", "redirect_uri": "https://client/callback" } Headers: { "Authorization": "Basic base64(client_id:client_secret)" } ``` - **自动化脚本**: 用 `requests` 库模拟OAuth2流程,断言响应字段。 #### 2. **安全扫描工具** - **Burp Suite**:拦截Token传输,测试是否启用HTTPS加密。 - **OWASP ZAP**: 主动扫描JWT常见漏洞(如 `alg=none` 绕过)。 --- ### 🔬 **四、关键断言清单** | **测试类型** | **检查项** | **通过标准** | | -------------------- | --------------------------------------------- | ---------------------------- | | **功能正确性** | 用AccessToken访问受保护资源 `/api/userinfo` | 返回200及正确用户数据 | | **令牌失效** | 使用RefreshToken刷新AccessToken | 新Token有效,旧Token立即失效 | | **权限控制** | 低权限Token访问管理员接口 `/api/admin` | 返回 `403 Forbidden` | | **防重放攻击** | 重复使用同一AccessToken | 第二次请求返回 `401` | --- ### ⚠️ **五、生产环境监控** 1. **日志审计**: - 记录异常的Token验证失败事件(如签名无效、过期)。 2. **告警机制**: - 高频Token刷新请求(可能遭暴力破解)。 --- ### 💎 **总结** - **核心目标**:确保 **授权流程无逻辑漏洞** + **JWT防篡改/防泄露**。 - **深度防御**:结合功能测试(Postman)、安全扫描(Burp Suite)、自动化脚本覆盖全场景。 - **标准参考**: [OAuth 2.0安全规范](https://datatracker.ietf.org/doc/html/rfc6819) [JWT最佳实践](https://jwt.io/introduction) > **示例漏洞案例**:某系统未校验JWT签名算法,攻击者修改 `alg=none` 并篡改Payload提升权限(CVE-2015-9235)。测试中需强制校验签名算法类型! 最后修改:2025 年 06 月 04 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏