0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenID Connectの次の世界へ:FAPI・DPoP・PKCE・SSE/CAEP・Verifiable Credentials

0
Last updated at Posted at 2026-04-08

OpenID Connectの次の世界へ:FAPI・DPoP・PKCE・SSE/CAEP・Verifiable Credentials

はじめに

前回の記事(OpenID Connectの仕様を整理する)では、OIDCのコア仕様を整理しました。

本記事では、OIDCの先にある発展的なトピックを取り上げます。金融・医療などの高セキュリティ領域への対応、トークン盗難への対策、そして分散アイデンティティという新しいパラダイムまで、認証・認可の「今と未来」を俯瞰します。


1. PKCE(ピクシー):すべてのクライアントへの必須対策

概要

** PKCE(Proof Key for Code Exchange) ** はRFC 7636で定義された、認可コード横取り攻撃への対策です。前記事でも触れましたが、改めて詳細を整理します。

仕組み

① クライアントがランダムな文字列(code_verifier)を生成
② SHA-256でハッシュ化(code_challenge)
③ 認可リクエストに code_challenge を含める
④ トークンリクエスト時に code_verifier を送信
⑤ 認可サーバーがハッシュを照合 → 一致すればトークン発行

なぜ重要か

  • 認可コードが横取りされても、code_verifierなしではトークンを取得できない
  • SPAやモバイルアプリなどクライアントシークレットを安全に保管できない環境では特に重要
  • 現在はすべてのOAuthクライアントに推奨(FAPI 2.0では必須)

2. DPoP(ディーポップ):トークン所有証明

概要

**DPoP(Demonstrating Proof of Possession)**はRFC 9449で定義された、トークンと送信者を紐づける仕組みです。

Bearerトークンの問題点

従来のBearerトークンは「持っているだけで使える」トークンです。

攻撃者がアクセストークンを盗む
  → そのままAPIを叩ける ← 問題

DPoPの解決策

① クライアントが公開鍵・秘密鍵ペアを生成
② APIリクエスト時に秘密鍵で署名した「DPoP証明JWT」を生成・添付
③ サーバー側でトークンと公開鍵の紐づきを検証
→ トークンを盗んでも、秘密鍵がなければ使えない
Bearerトークン DPoP
盗難時のリスク 即時悪用される 秘密鍵がないと使えない
実装複雑度 シンプル やや複雑
採用場面 一般的なAPI 金融・高セキュリティ領域

3. FAPI 2.0:金融グレードAPIのセキュリティ標準

概要

**FAPI(Financial-grade API)**はOpenID Foundationが策定した、金融・医療など高セキュリティ領域向けのOIDCプロファイルです。2023年にFAPI 2.0が公開されました。

FAPI 2.0の主な要件

要件 内容
PKCEの必須化 すべての認可リクエストでPKCEを使用
DPoPの採用 Bearerトークンではなく、DPoPで送信者を証明
PAR(Pushed Authorization Requests) 認可リクエストをサーバー間で送信(URLに機密情報を含めない)
RAR(Rich Authorization Requests) 詳細な認可情報をリクエストに含める

FAPI 2.0のセキュリティの考え方

「攻撃者がネットワーク上のすべての通信を傍受できる」
「認可サーバー以外のサーバーは信頼しない」

という厳しい脅威モデルを前提に設計されています。

日本ではOpen Bankingマイナンバー連携などの文脈でFAPIへの対応が進んでいます。


4. SSE / CAEP:継続的アクセス評価

概要

従来の認証は「ログイン時に一度だけ確認する」モデルでした。しかし、ログイン後に以下のような状況変化が起きても、アクセストークンが有効な間はアクセスし続けられます。

  • ユーザーのパスワードが変更された
  • アカウントが無効化された
  • デバイスが盗難に遭った

これを解決するのが**SSE(Shared Signals and Events)CAEP(Continuous Access Evaluation Profile)**です。

仕組み

認可サーバー / IDプロバイダー
  ↓ セキュリティイベントをリアルタイムで通知
リソースサーバー / クライアント
  ↓
アクセスを即時失効・再認証を要求

SSE / CAEPが検知するイベント例

イベント 内容
session-revoked セッションが取り消された
credential-change パスワード・MFAが変更された
token-claims-change ユーザーの属性・権限が変わった
device-compliance-change デバイスのコンプライアンス状態が変化

ゼロトラストセキュリティの考え方と親和性が高く、エンタープライズ領域での採用が進んでいます。


5. Verifiable Credentials:分散アイデンティティの世界

概要

これまで見てきた仕組みはすべて、中央集権的なIDプロバイダー(Google・GitHub等)に依存しています。

**Verifiable Credentials(VC)**はW3Cが策定した仕様で、ユーザー自身がアイデンティティを管理する分散型のモデルです。

登場人物

ロール 説明
Issuer(発行者) クレデンシャルを発行する 大学・政府・企業
Holder(保持者) クレデンシャルを保持・提示する ユーザー本人
Verifier(検証者) クレデンシャルを検証する サービス事業者

従来モデルとの比較

【従来モデル】
ユーザー → IDプロバイダー(Google等)に問い合わせ → サービス
           ↑ 中央集権・プロバイダー依存

【Verifiable Credentialsモデル】
Issuer → ユーザーのウォレットにVC発行
ユーザー → 必要な情報だけをVerifierに提示(選択的開示)
           ↑ 分散・自己主権型

ユースケース

  • デジタル学位証明:大学が発行、就職活動時に提示
  • 年齢確認:生年月日を開示せず「18歳以上」だけを証明
  • マイナンバーカードのデジタル化:政府発行のVCとして活用

関連技術

技術 概要
DID(Decentralized Identifier) 中央管理者不要の分散型識別子
DID Document DIDに紐づく公開鍵・サービス情報
Wallet VCを保管・管理するアプリ

6. 技術の全体マップ

OAuth 2.0(RFC 6749):認可の基盤
  ├── PKCE(RFC 7636):コード横取り対策
  ├── DPoP(RFC 9449):トークン所有証明
  └── OpenID Connect Core 1.0:認証の追加
        ├── FAPI 2.0:高セキュリティプロファイル
        │     ├── PKCE必須
        │     ├── DPoP必須
        │     └── PAR / RAR
        ├── SSE / CAEP:継続的アクセス評価
        └── Verifiable Credentials(W3C):分散ID

7. 参照仕様書

仕様書 概要
RFC 7636 PKCE
RFC 9449 DPoP
FAPI 2.0 Security Profile 金融グレードAPIセキュリティ
OpenID Shared Signals Framework SSE
W3C Verifiable Credentials 分散アイデンティティ

まとめ

トピック 解決する問題
PKCE 認可コードの横取り
DPoP アクセストークンの盗用
FAPI 2.0 金融・医療レベルの高セキュリティ要件
SSE / CAEP ログイン後のリアルタイムリスク対応
Verifiable Credentials 中央集権IDへの依存・プライバシー

認証・認可の世界は「ログイン時の一点確認」から「継続的・分散的・自己主権的」な方向へと進化しています。OIDCはその出発点であり、今もなお現役の重要な基盤です。


本シリーズ

  1. OAuth 2.0の認可フローを整理する
  2. OpenID Connectの仕様を整理する
  3. OpenID Connectの次の世界へ(本記事)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?