FAPI 2.0 深度解析:下一代金融级 API 安全标准与实践指南

作者:API传播员 · 2025-09-12 · 阅读时间:4分钟
FAPI 2.0引入了攻击者模型来定义潜在威胁和安全目标,与1.0版本相比,它采用了不同的设计思路,重点在于通过攻击者模型而非简单地划分基线和高级配置文件的级别。FAPI 2.0的安全配置文件是其基线,建议使用多种OAuth和OpenID规范来防御攻击者模型中定义的威胁。此外,FAPI 2.0进一步提升了令牌的安全性,通过发送方约束令牌确保令牌仅能被指定的接收方使用。消息签名配置文件是FAPI 2.0的高级配置文件,旨在满足攻击者模型中的所有安全目标,并实现消息类型的不可否认性。

一. 攻击者模型:FAPI 2.0 的安全目标基础

FAPI 2.0 引入了 攻击者模型,用于明确安全目标,并识别需要防范的潜在攻击者类型。这一模型的设计旨在为其他配置文件提供参考,使其能够轻松引用这些攻击者和目标,从而确保文档符合安全要求。

此外,攻击者模型还可用于 API 平台的正式安全分析,进一步提升整体安全性。这意味着 FAPI 2.0 不仅仅是技术规范,更是一个面向实际威胁场景的安全框架。


二. 基线安全:FAPI 2.0 的核心配置文件

FAPI 2.0 的安全配置文件可视为其 基线,建议使用多种 OAuthOpenID Connect 规范来防御攻击者模型中定义的威胁。

该配置文件涵盖了 角色要求、安全考虑、网络层保护以及加密算法 等主题。通过参考攻击者模型,安全配置文件明确了已知的敏感区域及其防护措施。

对于 服务器和客户端角色,配置文件详细列出了需要实现的流程,以确保符合安全要求。虽然 FAPI 1.0 的部分内容得以保留,但许多要求已被替换为新技术。例如:

  • 拨款管理(Grant Management)
  • 丰富授权请求(RAR)

在 FAPI 2.0 中被列为“建议”,而非强制要求。


1. FAPI 1.0 与 2.0 的关键区别

a. 仅代码流

在 FAPI 2.0 中,混合流被移除,仅支持 response_type=code
这意味着所有令牌都通过后端通道传递,从而无需加密 id_tokens

这一变化显著降低了客户端的复杂性,因为前端通道中获取 id_token 需要额外的验证步骤。现在,“nonce”、“s_hash” 和 “at_hash” 等验证已被移除。

b. 标准化与 PKCE

在 FAPI 1.0 中,id_token 用于验证响应的完整性和来源。
而在 FAPI 2.0 中,使用 PKCE 和代码流确保令牌通过 TLS 传递,进一步提高安全性。

  • PKCE 可验证请求是否来自同一来源,从而提供 CSRF 保护
  • 如果需要消息完整性,建议使用消息签名配置文件中的 JAR/JARM

c. 发送方约束令牌

FAPI 2.0 进一步提升令牌安全性,通过 发送方约束令牌 确保令牌仅能被指定的接收方使用,避免滥用。


三. 高级配置文件:消息签名

消息签名配置文件是 FAPI 2.0 的 高级配置文件,旨在满足攻击者模型中的所有安全目标,并实现 消息不可否认性

与安全配置文件不同,消息签名配置文件是独立的,实施者需根据需求选择合适的实现方案。

具体做法包括:

  • 授权请求与响应 → 使用 JAR/JARM 进行签名
  • HTTP 消息签名规范 → 对 资源请求和响应 进行签名

这样,客户端和资源服务器之间可以实现 端到端的不可否认性,防止伪造或篡改。


四. 实施建议:提升 FAPI 2.0 的实用性

FAPI 2.0 的实施建议文件目前仍在开发中,旨在为平台实施提供更具体的指导。

例如:

  • 建议在请求中添加 x-fapi-interaction-id 标头,用于 跨服务跟踪交互
  • 这些建议并非基线要求,但为开发者提供了 优化与增强安全性的方向

五. 总结

FAPI 2.0 的开发正在稳步推进,未解决的问题逐渐减少,目标逐步实现。

  • Curity 团队正密切关注 FAPI 2.0 的进展,并积极参与相关工作。
  • Curity Identity Server 8.0 已全面支持当前安全配置文件草案。
  • 虽然 消息签名配置文件 仍需进一步完善,但大部分功能已得到支持。

可以预见,随着 FAPI 2.0 的逐步成熟,它将成为 金融级 API 安全 的新标准,为银行、支付、保险等领域提供更强大的安全保障。

原文链接: https://curity.io/blog/the-state-of-fapi-2/