属于我们的Security & Cybersecurity系列
阅读完整指南API 安全最佳实践:身份验证、授权和速率限制
API 是现代商业平台的结缔组织。您的 ERP 通过 API 与您的电子商务商店进行通信。您的支付网关通过 API 处理交易。您的移动应用程序通过 API 获取数据。攻击者也知道这一点:Gartner 预测,到 2026 年,API 将超过传统 Web 界面,成为企业 Web 应用程序最常见的攻击媒介。
OWASP API 安全十大漏洞表明,最常见的 API 漏洞并不是外来的零日漏洞,而是根本性的身份验证失败、授权破坏和过多的数据泄露。这些都是可预防的缺陷,源于不完善的安全架构,而不是复杂的攻击。
要点
- OAuth2 与 PKCE 是 API 身份验证的当前标准;仅 API 密钥不足以满足生产系统的需要
- 破坏对象级授权 (BOLA) 是头号 API 漏洞 --- 每个端点都必须验证资源所有权
- 速率限制是一种安全控制,而不仅仅是性能优化 --- 它可以防止撞库、枚举和 DoS
- API 边界的输入验证可防止注入、溢出和业务逻辑攻击到达您的数据库
身份验证:证明身份
身份验证回答了“谁发出此请求?”的问题。对于 API,答案必须是可加密验证的、能够抵抗重放攻击并且能够跨分布式系统扩展。
认证方式比较
| 方法 | 安全级别 | 使用案例 | 限制 |
|---|---|---|---|
| API 密钥 | 低 | 服务器到服务器的内部工具 | 默认不过期,容易泄露,无用户上下文 |
| 基本身份验证(用户:密码) | 低 | 仅限旧系统 | 随每个请求发送的凭证,没有令牌过期 |
| JWT 不记名令牌 | 中高 | 面向用户的 API、微服务 | 必须验证签名、到期日和颁发者。撤销需要额外的基础设施 |
| OAuth2 + OIDC | 高 | 第三方接入、SSO、面向用户 | 实施复杂,需要身份提供者 |
| 双向 TLS (mTLS) | 非常高 | 服务对服务,零信任 | 证书管理开销,不适合浏览器 |
| API 密钥 + HMAC 签名 | 高 | Webhooks、许可证验证 | 需要共享秘密管理、时钟同步 |
OAuth2 和 OIDC 最佳实践
OAuth2 与 OpenID Connect (OIDC) 是现代应用程序中 API 身份验证的标准。主要实施实践:
将授权代码流程与 PKCE 结合使用适用于所有客户端类型,包括单页应用程序和移动应用程序。由于浏览器历史记录和引用标头中的令牌暴露,隐式流已被弃用。
**短期访问令牌。**访问令牌应在 15-60 分钟内过期。使用刷新令牌(安全存储,轮换使用)来获取新的访问令牌,而无需重新身份验证。
**令牌存储。**切勿将令牌存储在 localStorage 或 sessionStorage 中(容易受到 XSS 攻击)。使用具有 Secure 和 SameSite 属性的 HttpOnly cookie。对于必须直接使用令牌的 SPA,仅将它们保存在内存中并接受页面刷新时会话丢失的权衡。
彻底验证令牌。 每个 API 请求都必须验证令牌的签名、过期时间、颁发者、受众和范围。不要简单地解码 JWT 并信任其内容。
令牌绑定。 在可能的情况下,使用 DPoP(演示所有权证明)标头将令牌绑定到请求令牌的客户端,以防止令牌被盗和重放。
JWT 安全注意事项
JWT 是 API 最常见的令牌格式,但它们具有特定的风险:
- 切勿使用
none算法。 始终根据预期算法的白名单验证alg标头。 - 对于面向公众的 API,优先选择非对称算法(RS256、ES256),而不是对称算法(HS256)。非对称密钥允许在不共享签名密钥的情况下进行令牌验证。
- 包括标准声明:
iss(发行人)、aud(受众)、exp(过期)、iat(发行于)、sub(主题)、jti(用于撤销的唯一 ID)。 - 保持有效负载较小。 JWT 不是数据库。仅包括授权决策所需的声明。需要时从用户信息端点获取附加数据。
- 实施令牌撤销。 使用较短的过期时间与令牌阻止列表(在 Redis 或类似的中)相结合,以便在帐户受到威胁时立即撤销。
授权:实施访问控制
身份验证会告诉您谁在发出请求。授权告诉您他们可以做什么。 OWASP API Top 10 将破坏对象级授权 (BOLA) 列为排名第一的 API 漏洞,因为它是最常见且影响最大的。
RBAC 与 ABAC
基于角色的访问控制 (RBAC) 将权限分配给角色,并将用户分配给角色。它的实现和推理都很简单。
基于属性的访问控制 (ABAC) 针对用户、资源、操作和环境的属性评估策略。它支持更复杂的规则,但更难审核。
| 特色 | 角色控制 | 阿巴克 |
|---|---|---|
| 复杂性 | 简单 | 复杂 |
| 粒度 | 角色级别 | 属性级 |
| 规则示例 | “经理可以批准订单” | “经理可以在工作时间内批准其部门内 1 万美元以下的订单” |
| 可扩展性 | 多种条件角色爆发 | 随属性组合缩放 |
| 审计轻松 | 简单(枚举角色权限) | 硬(评估政策相互作用) |
| 实施 | 数据库查找 | 策略引擎(OPA、Cedar、Casbin) |
| 最适合 | 大多数商业应用 | 医疗保健、金融、政府 |
对于大多数业务平台(包括 ERP 和电子商务系统),RBAC 与资源所有权检查相结合就足够了。当您的授权规则取决于时间、位置、数据分类或动态组织层次结构等上下文因素时,请考虑 ABAC。
预防 BOLA
当 API 允许用户通过操纵资源标识符来访问或修改属于其他用户的资源时,就会发生对象级授权被破坏的情况。例如,将 /api/orders/12345 更改为 /api/orders/12346 不应泄露其他用户的订单。
预防规则:
- 每个端点都必须验证资源所有权。 切勿仅依赖身份验证。验证用户身份后,验证他们是否有权访问所请求的特定资源。
- 使用间接引用。 使用 UUID 或用户范围的引用号,而不是公开顺序数据库 ID。
- 在数据层强制执行。 将所有权过滤器(例如
WHERE organization_id = ?)添加到每个数据库查询,而不仅仅是在控制器级别。这是ECOSIRE 平台架构 中使用的多租户模式。 - 自动化测试。 在 CI/CD 管道中包含授权绕过测试。对于每个端点,测试用户 A 是否无法访问用户 B 的资源。
速率限制和节流
速率限制是一种防止滥用的安全控制,而不仅仅是防止过载的性能优化。如果没有速率限制,攻击者可以每秒尝试数千次执行凭证填充、枚举有效帐户、抓取整个产品目录或耗尽上游提供商的 API 配额。
速率限制策略
| 战略 | 机制 | 使用案例 |
|---|---|---|
| 固定窗 | 每个时间窗口 X 个请求 | 简单、通用的限制 |
| 推拉窗 | 滚动窗口跟踪请求时间戳 | 更顺畅的执行,防止窗口边界爆裂 |
| 令牌桶 | 代币按固定速率补充,请求消耗代币 | 允许受控爆裂 |
| 漏水桶 | 请求按固定速率排队和处理 | 产出率平稳,执行严格 |
| 自适应/动态 | 速率根据服务器负载或威胁级别进行调整 | 高流量 API、DDoS 缓解 |
按端点类型进行速率限制
不同的端点面临不同的威胁概况并需要不同的限制:
- 身份验证端点(登录、令牌交换):每个 IP 每分钟 5-10 个请求。低限制可以防止撞库和暴力破解。
- 密码重置/帐户恢复:每个帐户每小时 3-5 个请求。防止帐户枚举和滥用。
- 数据读取端点:每个用户每分钟 100-1000 个请求。防止刮擦,同时允许正常使用。
- 数据写入端点:每个用户每分钟 30-60 个请求。防止自动滥用和垃圾邮件。
- 公共搜索端点:每个 IP 每分钟 20-60 个请求。防止竞争性抓取。
- Webhook 接收器:验证签名而不是速率限制,但丢弃超出预期数量的请求。
实施速率限制
返回正确的 HTTP 状态代码和标头,以便客户端可以自我调节:
- 429 请求过多 超出限制时
- Retry-After 标头,其中包含限制重置之前的秒数
- X-RateLimit-Limit 标头显示允许的请求总数
- X-RateLimit-Remaining 标头显示窗口中剩余的请求
- X-RateLimit-Reset 窗口重置时带有 UTC 时间戳的标头
使用集中式速率限制服务(Redis 支持)而不是按实例限制来防止攻击者跨实例分发请求以绕过限制。
输入验证
API 边界的输入验证是抵御注入攻击、缓冲区溢出和业务逻辑利用的第一道防线。输入 API 的每条数据都必须经过类型、格式、长度、范围和业务规则的验证。
OWASP API 安全性前 10 名
OWASP API 安全 Top 10(2023 版)确定了每个 API 必须解决的关键风险:
| 排名 | 漏洞 | 预防 |
|---|---|---|
| API1 | 对象级授权被破坏 | 对每个资源访问的所有权检查 |
| API2 | 身份验证被破坏 | OAuth2/OIDC、MFA、安全令牌处理 |
| API3 | 损坏的对象属性级授权 | 响应过滤,不要暴露内部字段 |
| API4 | 资源消耗不受限制 | 速率限制、分页、查询复杂度限制 |
| API5 | 功能级授权被破坏 | 角色检查每个操作,而不仅仅是读取 |
| API6 | 不受限制地访问敏感业务流程 | 机器人检测、验证码、业务规则执行 |
| API7 | 服务器端请求伪造 (SSRF) | URL 验证、白名单、阻止私有 IP |
| API8 | 安全配置错误 | 安全标头、CORS 策略、错误处理 |
| API9 | 库存管理不当 | API 版本控制、弃用、文档 |
| API10 | API 的不安全使用 | 验证来自第三方 API 的数据是否不受信任 |
验证最佳实践
架构验证。 定义请求架构(使用 JSON Schema、Zod 或 OpenAPI 规范)并拒绝任何不符合要求的请求。这可以在格式错误的数据到达业务逻辑之前捕获它。
参数化查询。 切勿将用户输入连接到 SQL、NoSQL 或 LDAP 查询中。使用参数化查询或自动处理转义的 ORM 方法。这是适用于所有业务平台的关键安全规则。
内容类型强制。 仅接受预期的 Content-Type 标头。需要 JSON 的 API 应拒绝 XML、表单数据和其他内容类型,以防止基于解析器的攻击。
响应过滤。 切勿将完整的数据库记录返回给客户端。使用 DTO(数据传输对象)显式定义每个响应中包含哪些字段。密码哈希、内部 ID 和审核元数据等内部字段不应出现在 API 响应中。
错误处理。 将通用错误消息返回给客户端。切勿暴露堆栈跟踪、数据库错误或内部系统详细信息。在服务器端记录详细错误以进行调试。
API 安全架构模式
API网关模式
API 网关位于所有后端服务的前面,集中处理跨领域的安全问题:
- 身份验证 --- 在请求到达后端服务之前验证令牌
- 速率限制 --- 在网关级别强制实施限制
- 请求/响应转换 --- 剥离敏感标头,添加安全标头
- 日志记录和监控 --- 捕获所有 API 流量以进行安全分析
- WAF 集成 --- 阻止已知的攻击模式(SQL 注入、XSS 有效负载)
流行的 API 网关包括 Kong、AWS API Gateway、Azure API Management 和 Traefik。
服务到服务的身份验证
微服务之间的内部 API 也需要身份验证。选项包括:
- 相互 TLS (mTLS) --- 客户端和服务器都提供证书。功能强大但操作复杂。
- 服务令牌 --- 服务使用预共享令牌进行身份验证。简单但需要安全分发。
- 服务网格 --- Istio 或 Linkerd 自动处理 Kubernetes 中服务之间的 mTLS。
- OAuth2 客户端凭据 --- 服务使用客户端 ID 和密钥进行身份验证以获取访问令牌。
对于零信任架构,服务间身份验证对于防止违规后的横向移动至关重要。
监控和事件检测
API 安全监控必须捕获技术信号(失败的身份验证尝试、异常请求模式)和业务信号(异常交易金额、批量数据访问)。
关键 API 安全信号
- 身份验证失败 --- 从单个 IP 或针对单个帐户登录失败的次数激增
- 授权失败 --- 403 响应表明用户试图访问未经授权的资源
- 速率限制违规 --- 来自同一来源的持续 429 响应
- 异常数据量 --- 表明数据泄露的批量读取操作
- 参数篡改 --- 顺序ID枚举、负值、边界测试
- 地理异常 --- 来自意外区域或不可能的旅行模式的 API 调用
构建实时显示这些信号的仪表板。与您的 SIEM 集成以与其他安全事件关联。定义针对高可信度威胁的自动响应:阻止超过失败身份验证阈值的 IP、暂时禁用表现出不可能旅行的帐户,并对批量数据访问模式发出警报。
常见问题
我应该使用 API 密钥还是 OAuth2 令牌?
将 OAuth2 令牌用于为面向用户的应用程序或第三方集成提供服务的任何 API。 API 密钥仅适用于服务器到服务器的通信,其中两个端点都在您的控制之下,即使如此,HMAC 签名的请求也提供了更强的安全性。切勿使用 API 密钥作为可公开访问端点的唯一身份验证。
如何安全地处理 API 版本控制?
为了清晰和可发现性,使用基于 URL 的版本控制(例如 /api/v2/orders)。弃用版本时,设置日落日期,将其传达给消费者并监控使用情况。继续对已弃用的版本应用安全补丁,直到它们完全停用。永远不要让未打补丁的旧 API 版本继续运行——它们很容易成为攻击目标。
我应该为业务 API 设置什么速率限制?
开始保守,然后根据合法使用数据增加。对于身份验证端点,每个 IP 每分钟 5-10 个请求是标准的。对于数据端点,每个经过身份验证的用户每分钟 100-500 个请求涵盖了大多数业务用例。监视 429 响应以识别过于严格的限制,并监视滥用模式以识别过于慷慨的限制。
如何保护来自第三方服务的 Webhooks?
使用 HMAC-SHA256 和共享密钥验证 Webhook 签名。验证时间戳以防止重放攻击(拒绝超过 5 分钟的事件)。异步处理 Webhook 以防止基于超时的拒绝服务。记录所有 Webhook 事件以进行审计。在处理之前验证有效负载架构。
下一步是什么
API 安全性不是您在开发结束时添加的功能——它是必须从第一个端点开始体现的设计原则。从强身份验证 (OAuth2/OIDC) 开始,在每个资源访问点强制授权,对所有端点类型实施速率限制,并验证跨越 API 边界的每个输入。
ECOSIRE 将安全性融入到每个 API 集成中。我们的 OpenClaw AI 平台 默认实现 HMAC 签名请求、速率限制和 SSRF 保护,而我们的 Odoo ERP 集成 使用 OAuth2/OIDC 和基于角色的访问控制。 联系我们的团队 以保护您的业务平台 API。
由 ECOSIRE 发布 --- 通过 Odoo ERP、Shopify 电子商务 和 OpenClaw AI 等人工智能驱动的解决方案帮助企业扩展规模。
作者
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
相关文章
电子商务人工智能欺诈检测:在不阻止销售的情况下保护收入
实施 AI 欺诈检测,捕获 95% 以上的欺诈交易,同时将误报率控制在 2% 以下。机器学习评分、行为分析和投资回报率指南。
API 速率限制:模式和最佳实践
通过令牌桶、滑动窗口和固定计数器模式掌握 API 速率限制。使用 NestJS 节流器、Redis 和实际配置示例保护您的后端。
Authentik OIDC/SSO:完整集成指南
完整的 Authentik OIDC 和 SSO 集成指南:OAuth2 提供程序设置、Next.js 回调处理、NestJS JWT 验证、用户配置和生产配置。
更多来自Security & Cybersecurity
电子商务网络安全:2026 年保护您的业务
2026 年完整电子商务网络安全指南。PCI DSS 4.0、WAF 设置、机器人防护、支付欺诈预防、安全标头和事件响应。
2026-2027 年网络安全趋势:零信任、人工智能威胁和防御
2026-2027 年网络安全趋势的权威指南——人工智能驱动的攻击、零信任实施、供应链安全和构建弹性安全计划。
AI代理安全最佳实践:保护自治系统
确保 AI 代理安全的综合指南,涵盖即时注入防御、权限边界、数据保护、审计日志记录和操作安全。
中小企业云安全最佳实践:无需安全团队即可保护您的云
通过 IAM、数据保护、监控和合规性的实用最佳实践来保护您的云基础设施,中小企业无需专门的安全团队即可实施这些实践。
按地区划分的网络安全监管要求:全球企业合规地图
了解美国、欧盟、英国、亚太地区和中东的网络安全法规。涵盖 NIS2、DORA、SEC 规则、关键基础设施要求和合规时间表。
端点安全管理:保护组织中的每台设备
通过针对现代员工的设备保护、EDR 部署、补丁管理和 BYOD 策略的最佳实践来实施端点安全管理。