2. OAuth2.0 核心概念回顾:授权码模式、令牌、刷新令牌、作用域
在深入支付对账中间件与订单系统安全接入之前,必须重新校准 OAuth2.0 的核心概念。支付场景对令牌的生命周期、权限粒度与刷新机制有极高的要求,任何概念偏差都可能导致对账差异或安全漏洞。本节聚焦授权码模式、令牌、刷新令牌与作用域四个关键要素。
2.1 授权码模式(Authorization Code Flow)
授权码模式是 OAuth2.0 中最完整、最安全的流程,适用于有服务端后端的支付系统与中间件。其核心在于通过前端通道传递一次性授权码,后端通道交换令牌,避免令牌直接暴露在浏览器或移动端。
支付场景适用性: 支付订单系统通常采用 BFF(Backend for Frontend)架构,授权码模式天然适配服务端中转,可有效防止令牌被中间人截获。
2.2 令牌(Access Token)
令牌是客户端访问受保护资源的凭证。在支付系统中,令牌通常采用 JWT(JSON Web Token)格式,包含用户身份、作用域、过期时间等声明。
| 属性 | 说明 | 支付场景要求 |
|---|---|---|
| 格式 | JWT / Opaque | 推荐 JWT,便于中间件自验证 |
| 有效期 | 通常 15 分钟 ~ 2 小时 | 支付操作建议 ≤ 30 分钟 |
| 签名 | RS256 / HS256 | 必须使用 RS256 非对称签名 |
| 携带方式 | Authorization: Bearer <token> | 必须使用 HTTPS,防止泄露 |
对账差异提示: 令牌中的
sub(用户标识)与 order_id 声明必须与支付订单系统的用户 ID 一致,否则对账时会出现归属差异。
2.3 刷新令牌(Refresh Token)
刷新令牌用于在访问令牌过期后获取新的访问令牌,避免用户频繁重新认证。在支付对账中间件中,刷新令牌的合理使用可以保证长时间运行的对账任务不中断。
- 生命周期: 通常为 7 天 ~ 30 天,支付系统建议 ≤ 7 天。
- 存储要求: 必须安全存储在服务端,禁止暴露给前端。
- 轮换策略: 每次刷新后返回新的刷新令牌,旧令牌立即失效。
- 撤销机制: 当检测到令牌泄露或用户登出时,立即撤销刷新令牌。
2.4 作用域(Scope)
作用域定义了令牌的权限范围,是支付系统实现最小权限原则的关键手段。每个作用域对应一组 API 访问权限。
| 作用域 | 权限描述 | 支付场景示例 |
|---|---|---|
order:read |
读取订单信息 | 对账中间件拉取订单列表 |
order:write |
创建/修改订单 | 支付回调更新订单状态 |
payment:process |
执行支付操作 | 发起扣款、退款 |
refund:execute |
执行退款 | 售后系统发起退款 |
settlement:read |
读取结算数据 | 对账系统获取结算报表 |
安全警告: 支付订单系统严禁使用
* 通配符作用域。每个客户端只能申请其业务所需的最小作用域集合,且授权服务器必须校验作用域是否超出客户端注册时的白名单。
2.5 核心概念关系总结
授权码模式、令牌、刷新令牌与作用域共同构成了 OAuth2.0 的安全基础。在支付对账中间件中,这四者的配合决定了系统的安全水位与对账准确性。
- 授权码模式 确保令牌安全分发,避免前端直接接触敏感凭证。
- 访问令牌 作为短期凭证,承载用户身份与权限声明。
- 刷新令牌 支持长时间运行的对账任务,减少用户交互。
- 作用域 实现细粒度权限控制,防止越权操作导致对账差异。