授权后的处理逻辑

请求治理与后端执行

说明已授权请求如何经过流量保护、写入安全门禁和后端调用,并保持稳定的对外语义。

说明已授权请求如何经过流量保护、写入安全门禁和后端调用,并保持稳定的对外语义。

6. 请求处理流程

6.1 请求治理与执行层

请求治理与执行层只接收第 5.6 节输出的已授权请求。廉价且能够保护系统容量的检查在前,支付写请求的密码学校验在后;路由策略中心的第二执行点只有在身份、路由和请求类型都可信后才选择后端。

%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 32, "rankSpacing": 38, "htmlLabels": true}}}%% flowchart TB INPUT["已授权请求<br/>可信身份 + Scope · route · request_class"] --> RATE["分层限流<br/>来源 IP · Key · 商户 · 平台"] RATE --> IDEMPOTENCY{"写请求或路由要求幂等?"} IDEMPOTENCY -->|"是"| IDEM_CHECK["校验 Idempotency-Key 语法<br/>只透传 · 去重由后端拥有"] IDEMPOTENCY -->|"否"| WRITE_SECURITY IDEM_CHECK --> WRITE_SECURITY{"生产支付写路由?"} WRITE_SECURITY -->|"是"| PROOF["持有证明<br/>Ed25519 签名 + Nonce<br/>或认证后校验 mTLS 证书绑定"] WRITE_SECURITY -->|"否"| ROUTE PROOF --> ROUTE["执行点 2 · 后端选择<br/>健康候选 · 读取一致性门禁<br/>writer 与跨地域写入门禁"] ROUTING["流量路由策略中心<br/>后端候选与故障转移策略"] -.-> ROUTE ROUTE --> HEADERS["清除外部伪造的内部身份头<br/>注入网关签名身份上下文"] HEADERS --> CALL["调用策略<br/>超时上限 · 熔断 · 有界重试<br/>非幂等写请求不自动重试"] CALL --> PLATFORM["一个明确的支付平台后端"] PLATFORM --> RESPONSE["响应规范化<br/>稳定错误码 + request_id"] classDef input fill:#F4F7FB,stroke:#72849A,color:#253954,stroke-width:1.5px classDef runtime fill:#FFFFFF,stroke:#4F79A7,color:#18212F,stroke-width:1.5px classDef policy fill:#EDF8F3,stroke:#16835E,color:#124D3B,stroke-width:1.5px classDef external fill:#F7F9FC,stroke:#8A9AAF,color:#18212F,stroke-width:1.5px class INPUT,ROUTING input class RATE,IDEMPOTENCY,IDEM_CHECK,WRITE_SECURITY,PROOF,HEADERS,CALL,RESPONSE runtime class ROUTE policy class PLATFORM external

mTLS 握手发生在第 4.1 节所述的实际 TLS 终止点;这里只校验证书上下文是否与已认证 API Key 显式绑定。Ed25519 的 Nonce 状态不可用且后端全局幂等能力未验证时,支付写请求失败关闭。路由执行点只输出一个目标,网关不向多个业务数据库双写。

跨抽象节点的请求时序

sequenceDiagram participant M as 商户系统 participant I as 统一接入层 participant A as 访问控制中心 participant C as 本地域配置快照缓存 participant G as 请求治理与执行层 participant S as 支付平台服务 M->>I: TLS 请求与 API Key I->>I: 入口选择、DDoS、TLS、WAF、协议与可信来源 I->>A: 规范请求、可信来源 IP 与 mTLS 上下文 A->>A: 生成 request_id 并暂存路由匹配结果 A->>C: 读取版本化授权快照 C-->>A: Key 摘要、状态、绑定、Scope、版本 A->>A: 身份、Key-IP、路由可见性与 Scope 判定 alt 身份与路由授权通过 A->>G: 已授权请求与可信身份上下文 G->>G: 限流、幂等、支付写安全与后端选择 G->>S: 转发请求和受信身份上下文 S-->>G: 平台响应 G-->>I: 规范化响应 I-->>M: 返回稳定响应 else 身份或 IP 认证拒绝 A-->>I: 统一 401,不暴露具体安全配置 I-->>M: 返回 401 与 request_id else 路由不存在或 Scope 不足 A-->>I: 统一 404,不暴露路由可见性 I-->>M: 返回 404 与 request_id end

该时序图只表达抽象边界与关键依赖之间的先后关系及 401/404 分支,不重复各节点的内部检查。本地域配置快照缓存是访问控制中心的内部依赖,不是新增抽象边界。流量路由策略中心不作为同步参与者:执行点 1 已包含在统一接入层,执行点 2 已包含在请求治理与执行层。

每个请求按以下固定顺序处理:

  1. 边缘层完成 TLS、WAF 和基础协议校验,得到可信来源 IP。
  2. 网关分配全局唯一 request_id,规范化路径、方法和请求头。
  3. 网关可以暂存内部路由匹配结果,但在认证完成前不得根据该结果返回不同响应。
  4. API Key 验证服务解析公开 Key ID,取得配置快照并验证 Secret 摘要。
  5. 验证 Key 的商户归属、入口环境、状态、生效时间和过期时间。
  6. 验证来源 IP 是否与该 Key 存在显式绑定;以上任一认证步骤失败都统一返回 401
  7. 认证成功后处理路由匹配结果;路由不存在或 Key 缺少 required scope 时统一返回 404,避免路由枚举。
  8. 对可见路由执行附加策略;明确允许披露的业务策略拒绝可以返回 403
  9. 执行 Key 级和商户级限流。只有 request_class 为写入,或路由策略明确要求幂等时,网关才强制 Idempotency-Key 必填并校验长度和字符格式;网关只透传该值,不保存去重状态,内容冲突由后端平台检测并返回 409
  10. 对支付写请求执行第 5.5 节规定的 mTLS 或 Ed25519 请求签名校验。
  11. 根据商户路由分区、服务能力声明和后端健康状态选择一个目标实例。
  12. 清除外部伪造的内部身份头,写入由网关签名的商户、Key、Scope、区域和请求标识。
  13. 执行带上限的连接、请求和响应超时,不对非幂等写请求自动重试。
  14. 写入结构化访问日志、授权决策日志、指标和分布式追踪。

6.2 对外错误语义

HTTP 状态使用场景对外信息
400协议、字段或幂等键不合法返回稳定错误码和 request_id
401Key 缺失、格式错误、未知、Secret 不匹配、状态无效、环境不符或 IP 未绑定统一返回认证失败,不区分具体原因
403身份和路由均可见,但明确可披露的附加业务策略拒绝返回稳定访问拒绝码,不披露安全配置
404路由不存在,或已认证 Key 缺少该路由的 required scope两种情况使用相同响应,避免路由枚举
409后端平台判定幂等键与已有请求内容冲突网关原样传递稳定冲突错误码,不在网关保存去重状态
429商户或 Key 超过限流策略返回可安全披露的重试时间
502后端协议错误返回 request_id
503授权组件或目标服务不可用返回 request_id 和可重试标记
504后端超时返回 request_id 和可重试标记

内部日志保留精确 reason_code,但对外响应不披露 Key 是否存在、绑定了哪些 IP 或拥有哪些权限。