资源 · 43

OAuth 和 OpenID Connect:验证端到端集成

分别测试登录、委托和数据权限,然后测试重定向、令牌、会话和撤销。

已更新 · 3 min

本指南有助于实现的目标

  • 将身份与授权分离。
  • 拒绝意外重定向和令牌。
  • 像测试成功一样仔细地测试拒绝操作。
  • 验证用户离开或发生事件后访问权限的移除。

快速检查

  • 预期使用哪个提供商和颁发者?
  • 重定向 URI 是否已准确注册?
  • ID 令牌是否被错误地用作访问令牌?
  • 每个资源是否都检查所有权?
  • 哪些访问权限在撤销后仍然有效?

分步指南

  1. 1

    绘制已部署的流程图。

    识别公共或机密客户端、浏览器、授权服务器、API 和 OIDC 提供商。 记录代码和令牌的传输路径、存储者以及授予的角色。 销售流程图并不代表实际部署。

    交付内容:流程、信任边界和组件所有者。

  2. 2

    检查登录事务。

    使用适用于客户端的 PKCE 代码流。 检查 S256、事务绑定、已注册重定向和防止伪造请求的保护。 测试意外 URI、错误的验证器、重放代码和意外颁发者。 RFC 9700 根据客户端类型区分需求和建议。

    交付内容:允许和拒绝的测试结果。

  3. 3

    验证正确的令牌。

    API 根据格式和提供商规则验证其访问令牌:签名或自省、颁发者、受众、过期时间和权限。 OIDC 客户端单独验证身份令牌。 有效的签名并不能证明该令牌属于此 API。

    交付内容:验证合约、受众和过期时间测试。

  4. 4

    检查业务权限

    测试由其他帐户拥有的对象、较低角色、私有字段和管理操作。 范围或已验证的网关不能替代对请求资源的服务器端检查。 使用已授权的测试帐户和数据。

    交付成果:角色、对象、操作和预期拒绝矩阵。

  5. 5

    演练过期和撤销机制

    分离本地会话、提供商会话、访问令牌和刷新令牌。 测试离场、设备丢失、角色变更、签名密钥轮换和提供商中断等情况。 记录剩余访问时间,而不是假设注销会立即撤销所有权限。

    交付成果:访问权限移除时间表和例外情况。

  6. 6

    在不泄露密钥的情况下进行观察

    记录事务引用、验证决策、错误类别和配置版本。 排除代码、令牌和密钥。 准备诊断、集成关闭和回滚到已验证的配置;在提供商更改后重放测试。

    交付成果:操作规程和回归测试。

虚构示例

示例情境

示例场景:两个客户端使用同一个身份提供商。 第一个客户端使用的令牌被提交给第二个客户端的 API。

决策及预期证据

API 拒绝了错误的受众,记录了无令牌跟踪,并且没有返回任何数据。 此拒绝操作成为回归测试。

区分机制

机制目的验证或限制
OAuth 2.0委托资源访问服务器端对象权限
OpenID Connect通过已验证的 ID 令牌建立身份颁发者、受众和交易验证
应用程序会话维护应用程序登录过期、失效和会话保护

管理指标

指标衡量内容首要行动
更正拒绝实际阻止禁止的情况修复所有意外接受
撤销延迟相关访问权限消失的时间分别检查会话和令牌
验证失败按原因和版本拒绝将攻击与配置错误区分开来

常见错误

  • 混淆身份验证和授权
  • 检查签名后接受任何受众
  • 注册广泛的重定向 URI
  • 日志记录 便于调试的令牌

常见问题解答

PKCE 是否取代了所有控制?

否。 它保护了预期流程中的代码交换;令牌验证、重定向、业务授权和会话仍然需要检查。

JWT 是一种权限吗?

JWT 是一种格式。 声明只有在验证并应用 API 规则后才能使用。

是否应该从头开始构建验证?

建议使用维护良好的库和提供商文档,然后测试配置。 即使是正确的库也可能配置错误。

官方参考文献

参考文献支持该方法。 请根据您的实际情况调整检查;它们并非认证。 原始参考文献标题和源文档可能使用其他语言。