API 网关专栏 · 第 86 章

面向低代码与无代码集成的 API 网关:治理与安全

2026年09月21日
面向低代码与无代码集成的 API 网关:治理与安全

API 网关可以为低代码与无代码集成提供受治理的入口,但无法保证用可视化方式拼装的工作流天然正确或安全。更合理的模式是:网关负责已审阅的合同、认证、流量策略和边界遥测;集成平台负责连接器执行、机密信息使用、重试、工作流状态和人工审批。

这样既能让团队快速交付,也能避免每个自动生成的端点、Webhook 和连接器都成为无人负责的生产依赖。目标是受约束的自助服务:已批准能力易于使用,而跨越数据、身份或财务边界的变更需要更严格审阅。

关键要点

  • 盘点每个自动生成的 API、Webhook、连接器、责任人、数据类别和环境。
  • 发布已审阅的 API 合同,而不是直接暴露平台生成的任意 URL。
  • 区分用户认证、连接器凭证、工作负载身份和业务授权。
  • 在集成平台内部限制出口目标和机密信息访问;入口网关无法执行全部出口控制。
  • 在网关验证请求结构,但把对象与工作流授权留在应用中。
  • 测试重试、重复、重放、部分失败、连接器轮换和工作流退役。

选控制措施前先定义边界

低代码和无代码描述的是集成如何构建,而不是它的信任等级。业务专家创建的工作流仍可能传输受监管数据、发起支付、创建账户或调用管理 API。

应明确分配职责:

组件负责不能假设其负责
API 网关公共路由、凭证验证、粗粒度策略、配额、Schema 准入、边界遥测连接器机密信息存储、工作流状态、业务交易正确性
集成平台连接器执行、工作流状态、平台机密信息、定时任务、重试上游对象级授权或通用 API 治理
身份提供商用户/客户端认证、Token 签发、生命周期访问每个应用对象的权限
上游应用领域授权、验证、幂等性、交易状态未在上游或网关真正验证的身份
平台团队批准模式、环境、交付、可观测性每个工作流的业务归属
工作流负责人用途、数据使用、接收方、预期结果、支持和退役不受限制的基础设施访问

不要把集成平台的管理或编辑端点当成业务 API 暴露。创作、运行时调用、管理和回调界面需要彼此分离。

使用受治理的中介模式

1flowchart LR
2    C[已批准客户端或事件源] --> G[API 网关合同身份与配额]
3    G --> W[低代码工作流运行时]
4    W --> S[已批准连接器与机密信息代理]
5    S --> U[上游 API]
6    U --> W
7    W --> G
8    G --> C
9    G --> O[网关遥测]
10    W --> O2[工作流与连接器结果]
11    O --> R[责任人审阅与事件响应]
12    O2 --> R

网关观察入口边界。一个请求通过网关后,工作流运行时可能发起多次出站调用,因此网关请求数不等于连接器调用数或已完成业务操作数。应使用有界的关联值连接两类遥测,而不要把这个值误当成身份。

对于内部事件触发流程,来源可能是队列或调度器,而不是 HTTP 客户端。即使网关不在每一跳上,也应保持相同的归属模型。

让 API 合同可审阅

OpenAPI 3.1.2 可以描述路径、操作、参数、请求与响应 Schema、安全方案、回调和 Webhook。把有版本的 OpenAPI 文档作为合同输入,用于审阅、测试、文档和网关策略生成。

规范并不能证明已部署工作流会严格按描述运行。生成的连接器可能进行类型转换、丢弃字段、重试调用或改变错误,因此合同测试必须经过真实部署路径。

OpenAPI 文档可以引用工具自动获取的外部资源,规范明确警告这些资源可能不可信。应只把已批准的来源纳入允许列表、固定已审阅版本、限制大小和引用深度、检测循环,并在自动化或开发者门户中使用前清理渲染的 Markdown 或 HTML。

验证结构,但不要把它误认为授权

Apache APISIX 3.19.0 的 oas-validator 插件会在代理到上游前,根据 OpenAPI 3.x 文档验证请求方法、路径、查询参数、请求头和请求体。max_req_body_size 默认为 67,108,864 字节,更大的请求会被拒绝。对于小型集成载荷,通常应设置更低的路由级上限。

下面是面向 Schema 的配置片段,使用受控且有版本的规范 URL。生产交付路径仍须固定或批准实际获取的内容,因为只包含 v3 的路径本身不是不可变版本。它假设路由认证、上游 TLS、机密信息处理和应用授权已单独配置。

1{
2  "plugins": {
3    "oas-validator": {
4      "spec_url": "https://contracts.internal.example/inventory/v3/openapi.json",
5      "ssl_verify": true,
6      "timeout": 3000,
7      "max_req_body_size": 1048576,
8      "verbose_errors": false,
9      "skip_request_body_validation": false,
10      "skip_request_header_validation": false,
11      "skip_query_param_validation": false,
12      "skip_path_params_validation": false,
13      "reject_if_not_match": true,
14      "rejection_status_code": 400
15    }
16  }
17}

在 APISIX 3.19.0 中,请求体超限会使 core.request.get_body 返回错误,而 oas-validator 会在 Schema 验证前返回 HTTP 500。示例中的 rejection_status_code: 400 只适用于后续 OpenAPI 验证不匹配,不适用于读取请求体失败或超限。应分别测试这两类响应;如果需要为超限请求向客户端返回其他状态码,应另外配置请求大小控制。

在 APISIX 3.19.0 中,远程获取规范时 ssl_verify 默认为 false。false 路径会使用 HTTPS,但不验证规范服务器证书;true 路径会验证证书。示例选择 true。TLS 验证会在信任存储下认证所配置的主机,但固定和审阅文档版本仍是独立控制。

远程规范还引入了可用性边界。在 APISIX 3.19.0 中,spec_url_ttl 插件元数据字段默认为 3,600 秒;它不是上方路由级 oas-validator 对象中的字段。首次缓存未命中时,APISIX 会在请求路径中获取并编译规范;获取或编译失败会在代理到上游前返回 HTTP 500。缓存条目过期后,3.19 的缓存可继续使用上一次编译的规范,同时由定时器刷新;刷新失败时,陈旧的验证策略仍会生效。这不会自动绕过验证,却会延迟合同变更和撤销。应监控刷新失败与缓存年龄,确保上一份已批准文档仍可获取;如果无法接受远程依赖,则使用经审阅的内联规范。这些行为来自对应标签的 oas-validator 实现和 APISIX lrucache 实现,并非对每个 APISIX 版本的笼统承诺。

示例中的四个 skip_*_validation 选项都默认为 false:false 路径执行对应的请求体、请求头、查询或路径参数验证,true 则跳过。reject_if_not_match 默认为 true:true 会拒绝验证失败的请求,false 会记录失败后继续转发。监控模式有助于接入阶段,但不等于执行。

verbose_errors 默认为 false:false 返回所配置的拒绝结果,不包含详细验证信息;true 会提供更多细节,便于测试,却可能向调用方暴露合同内部信息。公共错误应保持有界,诊断上下文应发送到受保护日志。

Schema 通过只能证明请求符合所选合同,不能证明调用方拥有所引用的客户、获准批准发票,或已经给出当前有效同意。

区分四类身份

  1. **人类作者身份:**谁创建并批准工作流。
  2. **调用客户端身份:**哪个应用或事件源调用工作流。
  3. **工作流工作负载身份:**哪个已部署运行时在调用下游。
  4. **委托终端用户身份:**适用时,哪个用户授权了某项窄范围操作。

不要把共享的人类 API Token 放入每个连接器。应使用机密信息代理或平台 Vault,在支持时使用短期凭证,分离非生产和生产身份,并为工作负载配置窄权限凭证。

RFC 9700规定不得使用 OAuth 资源所有者密码凭据授权。可视化工具应把用户重定向到合适的授权流程,而不是让用户在工作流表单里输入 CIAM 或上游密码。访问 Token 应针对目标 API 限制受众与权限。

在添加已验证上下文前,应移除调用方提供的内部身份请求头,并确保工作流运行时不能绕过已认证网关路径直达高权限后端。

治理出站连接器与数据流动

入口网关本身无法阻止工作流把数据发送到任意 SaaS 连接器。集成平台需要:

  • 对连接器类型、账户、主机、方法和数据类别设置允许列表;
  • 提供能够抵御服务端请求伪造的 DNS、重定向、代理和私网控制;
  • 按环境、工作流和责任人隔离机密信息;
  • 审阅跨区域和跨组织数据传输;
  • 按目标最小化载荷并映射字段;
  • 记录连接器审计、撤销与轮换;
  • 限制超时、重试、并发和队列容量。

把连接器模板和社区组件当作代码依赖。固定版本、审阅权限、监控所有权并测试升级。市场标签不等于安全审阅。

按重复调用设计 Webhook 与重试

Webhook 来源在没有收到响应时会重试,却通常不知道工作流是否已经完成;工作流在上游超时后也可能重试。需要定义:

  • 在第一个可信接收方验证签名、时间戳和重放窗口;
  • 使用事件 ID 或幂等键,并配置有界去重存储;
  • 最大尝试次数、指数退避和死信路径;
  • 哪些方法和操作可以安全重试;
  • 如何记录并补偿部分完成;
  • 确认响应代表已排队、已处理还是已持久完成。

持久入队前返回 200 可能丢失工作;持久完成后返回错误可能造成重复。两条不明确路径都必须测试。

提供受约束的自助服务

提供铺好的安全路径,而不是不受限的生产访问:

  • 已批准的合同和 Webhook 模板;
  • 预配置的身份、Schema、配额和遥测策略;
  • 团队级命名空间和路由归属;
  • 使用合成数据的开发沙箱;
  • 自动合同、机密信息、策略和故障测试;
  • 受保护的生产晋级;
  • 工作流清单、责任人、最近使用时间、数据分类和到期时间;
  • 带审阅和自动到期的紧急访问。

按风险分级。只读通知工作流可以轻量审阅;转移资金、改变访问权限、导出个人数据或调用管理 API 的流程则需要更强的职责分离和证据。

低代码与无代码治理检查清单

  • 每个工作流是否有业务负责人、技术负责人、支持路径和到期审阅?
  • 创作、运行时、管理和回调端点是否分离?
  • 有版本的 API 合同是否已审阅,并与已部署流程做过测试?
  • 外部合同引用是否仅来自允许列表、固定了版本、限制了范围,并清理了不可信内容?
  • 是否明确 Schema 验证布尔参数的默认值和 true/false 路径?
  • 人类、客户端、工作负载和委托用户身份是否分离?
  • 工作流授权流程是否排除密码?
  • 连接器目标、机密信息、重定向和私网访问是否受限?
  • 重试、重复、部分完成和死信恢复是否经过测试?
  • 未使用的凭证、路由、回调和工作流能否完整退役?

常见问题

网关能否消除低代码工具造成的 API 蔓延?

不能。它可以集中管理已批准的暴露面和策略,但清单、归属、合同审阅、生命周期和退役仍是组织控制。否则 API 蔓延只是转移到一个主机名之后。

所有连接器调用都应经过同一个网关吗?

不一定。入口 API、内部服务和外部 SaaS 出口有不同的信任与路由需求。应让网关、出口代理、服务网格和平台连接器控制分别位于合适边界。

OpenAPI 验证足以保护上游吗?

不足。它检查选定的请求结构,认证、授权、业务验证、注入防御、幂等性和数据治理仍是独立责任。

后续步骤

从 OpenAPI 驱动的网关运维开始,治理 API 蔓延,并通过 API 网关 CI/CD交付变更。

获取方案