ブログ|Uni-ID

FAPI 2.0とは? | FAPI 1.0の課題を解決する「DPoP」と「攻撃者モデル」の重要性

作成者: 武田 麻奈|2026/05/26


FAPI 2.0は、従来のFAPI 1.0が抱えていた「実装の複雑さ」や「相互運用性」の課題を解消し、よりシンプルかつセキュアに設計された次世代のAPIセキュリティ標準規格です。

昨今、自社のAPIを外部に公開し、他社サービスと連携させることで新たな価値を創出する動きがさまざまな業界で広がっています。その一方で、個人情報や決済情報などの機密データを安全にやり取りするためのAPIセキュリティの担保は、企業にとって重要な課題です。
以前のブログ記事「FAPIとは?|高度なセキュリティレベルのAPIガイドラインを徹底解説」で解説した「FAPI 1.0」は、世界中のオープンバンキング等で採用されましたが、実装の難易度が高いことが課題でした。
本記事では、最新仕様として公開された「FAPI 2.0」の登場した背景と概要、1.0との具体的な違い、安全性を担保する主要技術について解説します。「高度なセキュリティは担保したいが、実装の複雑さに悩んでいる」という開発者やアーキテクトの方、必見の内容です。

FAPIとは

Webアプリケーションやモバイルアプリケーションの普及に伴って、ユーザデータへのアクセスが異なるアプリケーション間で共有される機会が増えてきています。それを受けて、ユーザの認証や認可をセキュアに行うためのオープンスタンダードとしてOAuth 2.0 OpenID Connectといった認証・認可フレームワークは広く利用されるようになりました。

そのOAuth 2.0 や OpenID Connectをベースに、金融業界等のより高いAPIセキュリティレベルを要求されるシステムへのガイドラインとして、OpenID Foundation の FAPIワーキンググループが策定した技術仕様がFAPIです。FAPIは「FAPI 1.0 Final [1][2]」(以下、本記事では「FAPI 1.0」と記載)が2021年3月に公開され、その後、2025年2月と9月に「FAPI 2.0 Final [3][4][5]」(以下、本記事では「FAPI 2.0」と記載)が公開されました。本記事では、FAPI 2.0に焦点を当ててご説明します。

FAPI 2.0 の概要

FAPI 2.0は以下の3つが最終仕様として公開されています。

  • FAPI 2.0 Security Profile [3] (公開日:2025年2月22日)
    FAPI 2.0の基本となるAPIセキュリティプロファイルです。OAuth 2.0やOpenID Connectをベースとし、最新のOAuth Security Best Current Practice(OAuth Security BCP)の推奨事項に従って、金融や医療、政府系サービスなどの高リスク・高価値なAPIを保護するための要件を定義しています。具体的には、送信者制約付きアクセストークン(MTLSやDemonstrating Proof-of-Possession(DPoP))の安全な取得や、リソースサーバでのセキュアな利用プロセスなどが規定されており、後述の「FAPI 2.0 Attacker Model[4]」で定義されたセキュリティ目標を達成するように設計されています。

  • FAPI 2.0 Attacker Model [4] (公開日:2025年2月22日)
    FAPI 2.0のセキュリティ設計の基盤となる、防御すべき脅威(攻撃者)のモデルとセキュリティ目標を定義したドキュメントです。特定の狭い脅威に対処するのではなく、通信の傍受や改ざんが可能な非常に強力な能力を持つ攻撃者を想定しています。この明確なモデルが定義されていることにより、未知の攻撃も見落とさないための形式的な解析が可能となっています。

  • FAPI 2.0 Message Signing [5] (公開日:2025年9月25日)
    決済の実行などにおいて、通信を行った事実や内容を後から否認できないようにする「否認防止(Non-repudiation)」の機能を提供するためのプロファイルです。「FAPI 2.0 Security Profile[3]」の要件を拡張する形で、認可リクエスト(JWT-Secured Authorization Request(JAR)を利用)や認可レスポンス(JWT Secured Authorization Response Mode(JARM)を利用)、イントロスペクションレスポンスなどに対して、アプリケーションレベルのデジタル署名を付与し、検証するための要件を定めています。

FAPI 2.0登場の背景としては、FAPI 1.0は、英国のオープンバンキングやブラジルなどで採用され、広く普及しました。しかし、実際に世界中で実装や運用が進むにつれて、いくつかの課題も浮き彫りになりました。例えば、高いセキュリティを担保するために複雑なメッセージ署名(Message Signing)が求められ、開発者にとって実装のハードルが高いという課題がありました。また、仕様内にオプションが多く残されていたため、異なるシステム間での相互運用性(互換性)を確保しづらいケースもありました。 そこで、これらの課題を解決し、より使いやすく安全な仕様へとアップデートするためにFAPI 2.0が登場しました。FAPI 2.0の策定には、主に以下の4つの背景と目的があります。

  • 実装の簡素化
     セキュリティレベルを低下させることなく、メッセージ署名の要件などを減らし、開発者がより簡単に実装できるようになりました。 

  • 相互運用性の向上
     オプションや代替機能を極力排除し、仕様をシンプルに統一することで、異なるシステム間でもスムーズに接続できるよう設計されています。 

  • 最新セキュリティへの準拠
    最新のOAuth Security BCPに準拠しているほか、新たに明確な攻撃者モデルを定義し、脅威の分析や安全性の証明がしやすい強固なセキュリティ基盤を構築しました。

  • スコープの拡大
     FAPI 1.0では対象外であった、きめ細かなアクセス制御やトランザクション単位での認可といった、より高度なユースケースにも対応可能になりました。 

FAPI 1.0 と FAPI 2.0 の主な違い

FAPI 2.0は、FAPI 1.0の高度なセキュリティレベルを維持しつつ、開発者にとってよりシンプルで実装しやすく、相互運用性の高い仕様へと進化しました。主な違いは以下の通りです。

FAPI 1.0とFAPI 2.0の比較表

観点 FAPI 1.0(Part 2: Advanced) FAPI 2.0 変更の背景・ポイント
プロファイルの構成 Baseline / Advanced
中程度の固有リスク向け(Baseline)と、より高い固有リスク向け(Advanced)として分類。
Security Profile / Message Signing
基本のセキュリティプロファイルと、否認防止を求めるオプションプロファイルに分離。
脅威モデルに対応する基本要件(Security Profile)がすでに強力であり、トランザクションの否認防止が必要な場合のみメッセージ署名を追加する形に整理。
認可リクエストの送信 JAR必須 / PARはオプション
リクエストオブジェクト(JWT)をフロントチャネルで送信(request / request_uri)。改ざん検知に署名を利用。
PARの必須化
認可リクエストをバックチャネルで直接送信するPushed Authorization Requests(PAR)が必須。
認可リクエストの完全性保護と互換性を向上させるため。PARを必須化することで、認可リクエストのパラメータがブラウザを経由しなくなり機密性も向上。
認可レスポンスの返却 ID Token as detached signature または JARM
IDトークンによるDetached署名(c_hash, s_hash等を利用)、またはレスポンス全体をJWT化するJARMを利用。
response_type=code のみ
フロントチャネルでのIDトークン返却を廃止(メッセージ署名時を除きJARMも不要)。
 フロントチャネルにIDトークンを含めないことによるプライバシー向上。また、クライアント側で省略される恐れのある署名検証などを、省略不可能なProof Key for Code Exchange(PKCE)に置き換えることによるセキュリティ向上のため。さらに、IDトークンがバックチャネルのみで交換されるようになり、暗号化が不要。 
認可リクエスト・レスポンスの紐づけ state や s_hash の利用
CSRF対策などで利用。
PKCEの必須化
S256アルゴリズムを用いたPKCEの利用が必須。
state による保護(特にCSRF対策)がPKCEによってカバーされるようになったため。なお、state パラメータ自体の完全性はPARによって部分的に保護される。
トークン要求(クライアント認証と紐づけ) 送信者制約付きアクセストークン(MTLS)
クライアント証明書を用いたMTLSが中心。
MTLS または DPoP
MTLSに加えて、DPoPも代替手段としてサポート。
TLSレイヤーとの密接な統合が不要であり、特定のシナリオにおいてDPoPの方が展開しやすいため、公式な選択肢としてDPoPが追加された。
セキュリティ設計の基盤 特定の脅威に基づく防御
BCMの原則に基づく。
明確な攻撃者モデルの定義
強力な攻撃者を定義し、形式的な解析を実施。
特定の脅威に基づく防御から、明確な攻撃者モデルとセキュリティ目標、OAuth Security BCPのベストプラクティスに基づく形に変更することで、より明確な設計ガイドラインを設け、形式的な解析を行いやすくした。

FAPI 2.0 の主要技術

本章では、FAPI 2.0の基盤となる主要な技術要素について解説します。

  • PAR

    認可リクエストのパラメータを、ユーザのブラウザ(フロントチャネル)経由ではなく、クライアントと認可サーバ間の直接通信(バックチャネル)で事前に送信する仕組みです。FAPI 2.0ではPARの利用が必須化されており、リクエストパラメータの改ざんや漏洩を防止し、機密性と完全性を保護します。

  • PKCE
    FAPI 2.0では、認可コードの横取り攻撃を防ぐためのPKCEを必須化しています。PKCEは認可リクエストごとに一意のcode_verifierを生成・検証する仕組みであるため、副次的にCSRF対策としても機能します。これにより、FAPI 1.0でCSRF対策として用いていたstateパラメータはセキュリティ目的での利用が不要となり、純粋なアプリケーションの状態保持(画面遷移の復元など)にのみ利用できるようになりました。
    PKCEでは、以下の3つのパラメータが使用されます。
    • code_verifier:認可リクエストごとに生成されるランダムな文字列。

    • code_challenge: code_verifierをsha256でハッシュ化しBase64URLエンコードしたもの(下記「S256」を指定の場合)。

    • code_challenge_method:code_challengeの導出方法。
      ※FAPI 2.0では、S256アルゴリズムの使用が必須。

PKCE利用時のシーケンス図

  • 送信者制約付きアクセストークン(MTLS / DPoP)
    発行されたアクセストークンを特定のクライアントに紐づけ、万が一トークンが漏洩しても正当なクライアント以外による悪用を防ぎます。
    FAPI 2.0では以下のいずれかの手法の利用が必須とされています。

    • MTLS
      FAPI 1.0から推奨されてきたクライアント証明書を利用してネットワークのTLSレイヤーで認証とトークンの紐づけを行う手法です。
      クライアント証明書を用いて通信路自体で認証を行うため、極めて強固ですが、各機器がクライアント証明書の検証またはパススルーに対応している必要があり、既存のネットワークの構成・設定変更が必要となるケースが多く、また証明書の配布・管理の必要性も実務においては高いハードルとなっていました。
    • DPoP
      FAPI 2.0で導入されたアプリケーション層において公開鍵暗号を用いてトークンを制約する手法です。
      DPoPの最大の意義は、「標準的なHTTPS通信のみで、MTLSと同等の送信者制約を実現できる」点にあります。アプリケーションレイヤーで署名を検証するため、TLSレイヤーとの密接な連携が難しい環境でも導入可能になりました。

      DPoP利用時のシーケンス図

  • メッセージ署名(JARM / JAR等)による否認防止
    金融取引などでは、当事者がメッセージを送った事実を後から否認するリスクがあります。こうした「否認防止(Non-repudiation)」が求められるユースケース向けに、「FAPI 2.0 Security Profile[3]」を拡張するオプションとして「FAPI 2.0 Message Signing[5]」が用意されています。ここでは、リクエスト全体を署名するJARや、認可レスポンス全体をJWT化して署名するJARMを利用して、メッセージの完全性と否認防止を実現します。

攻撃者モデル(Attacker Model)の定義

FAPI 1.0では、既知の特定の脅威に基づく防御アプローチがとられていましたが、複雑なプロトコルにおいては、未知の脅威や既存の脅威の新たな変種が出現する可能性があります。そのためFAPI 2.0では、特定の狭い脅威だけに対処するのではなく、非常に強力な能力を持つ攻撃者のモデルを定義し、それに基づき形式的に解析を実施するアプローチが採用されました。
攻撃者モデルでは、防御のレベルを引き上げるため、以下のような強力な攻撃者が存在し、場合によってはこれらが互いに協力してシステムを狙うことを想定しています。

  • A1(Web攻撃者)
    悪意のあるWebサイトを運営し、一般ユーザにリンクを踏ませて誘導したり、自身の端末のブラウザやプロキシツール等を用いてメッセージを操作・改ざんしたりできる攻撃者。
    一方で、以下の行為はできない。

    • 自分以外の第三者間でやり取りされる通信の傍受やブロック。
    • 復号鍵を持たない状態での暗号化の解読。
    • エコシステム内で正規の認可サーバとして振る舞うこと。
      ※この能力を持つ攻撃者は、別モデルのA1aとして定義されている。

  • A1a(認可サーバとして参加するWeb攻撃者)
    A1の能力に加え、エコシステム内で認可サーバとして振る舞い、受け取ったメッセージを悪用(リプレイ)できる攻撃者。

  • A2(ネットワーク攻撃者)
    悪意のあるWi-Fiアクセスポイントを運営するなどしてネットワーク全体を制御し、他人の通信の傍受、ブロック、改ざんを行える攻撃者(ただし、暗号化そのものを自力で破ることはできない前提)。

  • A3a(認可エンドポイントでの攻撃者)
    Web攻撃者の能力に加えて、ユーザのブラウザ(フロントチャネル)経由で送信される認可リクエストを、モバイルOSの機能やブラウザ履歴、TLS傍受ソフトなどを通じて読み取ることができる攻撃者。

  • A4(トークンエンドポイントでの攻撃者)
    クライアントを騙して、正規の認可サーバのものではない不正なトークンエンドポイントを利用させることができる攻撃者。
    ※「FAPI 2.0 Security Profile[3]」では、トークンエンドポイントのアドレスは正規の認可サーバのOAuthメタデータから取得することが必須化されており、エンドポイントの偽装が発生しない。そのため、FAPI 2.0においては参考情報とする。

  • A5(リソースサーバでの攻撃者)
    リソースサーバ側のTLSプロキシログなどを通じて、処理後のリソースへのリクエストを読み取ることができる攻撃者。
    ※リソースサーバからのレスポンスを読み取ることができる攻撃者は、ここで考慮しない。

FAPI 2.0は、上記に挙げたような強力な能力を持つ攻撃者が存在する環境下であっても、「権限のないリソースへの不正アクセス」「他ユーザへのなりすましログイン」「不正なセッションの強制(CSRFやセッションスワッピング攻撃)」を確実に防げるように設計・証明されています。この厳密な証明があるからこそ、金融や医療などの重要インフラでも安心して採用できる基準となっています。

ただし、このモデルではシステム基盤自体が正常に動作していることを前提としており、以下の脅威はスコープ外(FAPI 2.0単体では防げない範囲)として明確に切り分けられています。

  • TLS暗号化そのものの根本的な破綻(通信の完全性や機密性が失われること)
  • 鍵配布メカニズム(JWKS)の不具合
  • ユーザの端末(ブラウザ等)自体のマルウェア感染や乗っ取り
  • アイデンティティおよびセッション管理の不備

まとめ

FAPI 2.0は、FAPI 1.0の高度なセキュリティを維持しながら、「よりシンプルで実装しやすい仕様」と「システム間の完全な相互運用性」を両立させた次世代のAPIセキュリティ規格です。これまで開発者にとって複雑であったメッセージ署名の要件が軽減され、認可リクエストの安全性を高めるPARや認可コード横取りを防ぐPKCEが標準採用されました。また、送信者制約のための技術として「DPoP」が導入された意義も大きく、従来のMTLSの運用が困難な環境においても、トークンの盗用を防止する強固なセキュリティを実現できるようになりました。これにより、堅牢でありながらも格段に扱いやすい仕様へと進化を遂げました。これまで金融業界を中心に普及してきたFAPIですが、実装コストが下がり相互運用性が高まったことで、今後は医療、政府系インフラなど高リスクなデータを扱うあらゆる領域での活用が期待されています 。

高度なセキュリティを維持しながら、ビジネスのスピードを落とさない。FAPI 2.0は、これからのAPIエコシステムにおいて不可欠なガイドラインとなるでしょう。自社サービスのセキュリティレベル向上や、グローバルな標準への準拠を検討されている方は、ぜひこの機会に導入に向けた具体的な検討を進めてみてはいかがでしょうか。


当社には、FAPIをはじめOAuth 2.0/OpenID Connectに精通したスペシャリストが多数在籍しており、要件定義から実装まで幅広くご支援可能です。また、FAPI対応を強力に支援するAPIゲートウェイ「Kong Gateway」などのソリューションも提供しております。APIセキュリティに関する課題がございましたら、ぜひお気軽にご相談ください。

[1]Financial-grade API Security Profile 1.0 - Part 1: Baseline https://openid.net/specs/openid-financial-api-part-1-1_0.html
[2]Financial-grade API Security Profile 1.0 - Part 2: Advanced https://openid.net/specs/openid-financial-api-part-2-1_0.html
[3] FAPI 2.0 Security Profile https://openid.net/specs/fapi-security-profile-2_0-final.html
[4] FAPI 2.0 Attacker Model https://openid.net/specs/fapi-attacker-model-2_0-final.html
[5] FAPI 2.0 Message Signing https://openid.net/specs/fapi-message-signing-2_0-final.html