接口鉴权与授权测试是什么
鉴权(Authentication)解决「你是谁」,授权(Authorization)解决「你能做什么」。接口层要按矩阵验证:无凭证与无效凭证应 401,有效凭证但权限不足应 403,最关键的还要测对象级越权——换一个资源 ID 能否拿到他人数据。令牌过期、签名错误、最小权限核对都在清单里。越权是接口安全里最常见、也最容易被漏测的一类缺陷。
场景
| 场景 | 预期结果 |
|---|---|
| 无凭证 | 401 |
| 无效/伪造凭证 | 401 |
| 有效凭证、权限不足 | 403 |
| 同权限访问他人对象 | 403 或 404(按设计约定) |
| 过期令牌 | 401(并覆盖时钟偏差场景) |
| 注销/改密后的旧令牌 | 401(令牌失效即时生效) |
基本信息
| 401 与 403 | 缺凭证或凭证无效 vs 凭证有效但权限不足,断言必须分开 |
|---|---|
| 对象级越权 | 同类资源换 ID、跨租户换 ID 都要覆盖 |
| 凭证生命周期 | 签发、过期、刷新、注销、改密后的失效行为 |
| 最小权限核对 | 低权限角色不应具备不该有的接口访问 |
| 记录要求 | 安全类缺陷单独标注,便于跟踪修复时限 |
典型使用场景
- 新接口接入:按鉴权矩阵逐格设计用例,评审前完成覆盖。
- 权限模型调整:角色与资源关系变化后,回归越权用例集。
- 令牌机制升级:JWT 换版本或接入统一认证后验证全生命周期。
- 多租户系统:核对租户隔离,验证跨租户访问被拒绝。
- 公开接口审计:检查无需认证的接口是否真无敏感数据。
- 回归巡检:把越权用例做成用例集,每个版本自动执行。
越权验证示例
越权验证示例
curl -i https://api.example.com/orders/1001
# 无凭证:预期 401
curl -i -H 'Authorization: Bearer <用户B的令牌>' https://api.example.com/orders/1001
# 订单 1001 属于用户 A:预期 403 或 404,绝不能返回数据
curl -i -H 'Authorization: Bearer <过期令牌>' https://api.example.com/me
# 过期令牌:预期 401,响应体不应泄露内部校验细节对象级越权覆盖「同类资源换 ID」与「跨租户换 ID」两类(参考 OWASP API Security Top 10 的 API1/API2)。
403 与 404 的选择是产品与安全约定:对外隐藏资源存在性时返回 404,断言写死前先与团队核对。
越权用例要覆盖批量接口:列表与导出接口常按查询条件泄漏他人数据,逐个单对象测试覆盖不到。