2. OAuth2.0核心概念

在 EDI 报文传输场景中,OAuth2.0 并非一个黑盒协议,而是由六个明确角色与令牌对象构成的授权框架。理解这些核心概念是配置正确权限策略的前提。本节将逐一拆解每个角色的职责及其在 EDI 集成中的映射关系。

2.1 六大核心角色与令牌对象

下表列出了 OAuth2.0 授权框架中的六个基本元素,并给出了它们在 EDI 报文传输中的具体对应实例:

角色 / 对象 英文名称 EDI 场景映射 核心职责
资源所有者 Resource Owner EDI 报文的数据归属方(如供应商、零售商) 授权客户端访问其受保护的 EDI 报文数据
客户端 Client EDI 集成平台、第三方物流系统或内部 ERP 代表资源所有者发起授权请求并获取令牌
授权服务器 Authorization Server 企业统一身份认证平台(如 Keycloak、Okta) 验证资源所有者身份并颁发访问令牌
资源服务器 Resource Server EDI 报文存储 API 或 B2B 网关 验证访问令牌并返回受保护的 EDI 报文
访问令牌 Access JWT 格式的短期凭证(有效期通常 15-60 分钟) 授权客户端访问特定 EDI 报文资源
刷新令牌 Refresh 长期凭证(有效期数小时至数天) 在访问令牌过期后获取新的访问令牌
EDI 集成提示: 在 EDI 场景中,资源所有者通常不是最终用户,而是拥有 EDI 报文数据的企业实体。客户端往往是自动化系统,因此推荐使用 客户端凭证模式(Client Credentials Grant),该模式不需要资源所有者交互,适合服务器到服务器的 EDI 报文传输。

2.2 角色交互流程:从授权到报文传输

下图展示了 OAuth2.0 授权码模式(Authorization Code Grant)下,六个核心元素如何协作完成一次安全的 EDI 报文访问:

OAuth2.0 核心角色交互流程 - EDI 报文传输场景 OAuth2.0 核心角色交互流程(EDI 报文传输场景) 资源所有者 (EDI 数据归属方) 客户端 (EDI 集成平台) 授权服务器 (身份认证平台) 资源服务器 (EDI 报文 API) 访问令牌 刷新令牌 ① 授权请求 ② 请求授权码 ③ 返回授权码 ④ 换取令牌 ⑤ 颁发令牌 ⑥ 携带令牌请求 EDI 报文 说明:刷新令牌仅在访问令牌过期后使用,客户端通过刷新令牌向授权服务器请求新的访问令牌,无需用户重新授权。
流程要点:
  • 步骤 ①-③:资源所有者(EDI 数据归属方)通过浏览器或客户端应用授权,授权服务器返回授权码。
  • 步骤 ④-⑤:客户端使用授权码向授权服务器换取访问令牌和可选的刷新令牌。
  • 步骤 ⑥:客户端携带访问令牌请求资源服务器(EDI 报文 API),资源服务器验证令牌后返回受保护的 EDI 报文。

2.3 令牌生命周期与安全策略

访问令牌和刷新令牌具有不同的生命周期和安全属性,在 EDI 集成中需要分别配置:

属性 访问令牌 刷新令牌
有效期 短(15-60 分钟) 长(数小时至数天)
存储位置 客户端内存或短期缓存 客户端安全存储(如加密数据库)
传输方式 HTTP 请求头(Authorization: Bearer) 仅通过授权服务器令牌端点传输
撤销机制 通常不支持主动撤销(依赖短有效期) 支持主动撤销(授权服务器提供撤销端点)
EDI 场景建议 每次 EDI 报文传输请求都携带 用于批量 EDI 报文处理的会话保持
安全警告: 在 EDI 报文传输中,刷新令牌的泄露风险远高于访问令牌。如果刷新令牌被窃取,攻击者可以持续获取新的访问令牌。建议对刷新令牌实施以下保护措施:
  • 使用 刷新令牌轮换(Refresh Rotation):每次使用后颁发新的刷新令牌,旧令牌立即失效。
  • 设置 刷新令牌过期时间(如 7 天),即使未使用也强制失效。
  • 在 EDI 集成平台中,将刷新令牌存储在硬件安全模块(HSM)或密钥管理服务(KMS)中。

2.4 客户端凭证模式:EDI 自动化的首选

在 EDI 报文传输中,客户端通常是无人值守的自动化系统(如 EDI 集成引擎、B2B 网关)。此时推荐使用 客户端凭证模式,该模式仅涉及客户端、授权服务器和资源服务器三个角色,无需资源所有者交互:

客户端凭证模式 - EDI 自动化场景 客户端凭证模式(Client Credentials Grant) 客户端 (EDI 集成平台) 授权服务器 (身份认证平台) 资源服务器 (EDI 报文 API) ① 凭证请求 ② 返回访问令牌 ③ 携带令牌请求 EDI 报文 ④ 返回 EDI 报文 说明:客户端凭证模式不需要资源所有者参与,适合 EDI 批量报文传输、定时同步等自动化场景。
配置示例: 在 EDI 集成平台中配置客户端凭证模式时,需要向授权服务器注册客户端并获取 client_id 和 client_secret。以下是一个典型的令牌请求代码示例:
POST / HTTP/1.1
Host: auth.edi-platform.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=edi_integration_app
&client_secret=your_client_secret_here
&scope=edi:read edi:write
授权服务器将返回一个访问令牌,客户端在后续的 EDI 报文请求中携带该令牌:
GET /api/v1/edi/orders/2024-01-01 HTTP/1.1
Host: edi-gateway.company.com
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

2.5 核心概念总结

OAuth2.0 的六个核心概念构成了 EDI 报文传输安全的基础框架。在实际集成中,需要根据 EDI 场景选择合适的授权模式:

  • 资源所有者:EDI 数据归属方,决定谁可以访问其报文数据。
  • 客户端:EDI 集成平台或第三方系统,代表资源所有者发起请求。
  • 授权服务器:身份认证平台,负责验证身份并颁发令牌。
  • 资源服务器:EDI 报文 API 或 B2B 网关,验证令牌并返回数据。
  • 访问令牌:短期凭证,每次 EDI 报文请求都必须携带。
  • 刷新令牌:长期凭证,用于在访问令牌过期后获取新令牌。