Attestation-Based Client Authentication 実践編
仕様編では draft-ietf-oauth-attestation-based-client-auth の仕様そのものを解説しました。この実践編では、登録から認証までを実際のモバイルアプリで実現するために必要な知識をまとめます。
仕様が規定するのは「2つの JWT のワイヤ形式と検証ルール」だけです。実際に動かすには、その外側 — 「Attester はどうやってアプリの正当性を確認するのか」「AS は誰の鍵を信頼するのか」 — をエコシステムとして設計する必要があります。
第1部: 全体の流れ — 2つのフェーズ
実装は「登録」と「認証」の2フェーズに分かれます。
【登録フェーズ】インストール後に1回(+ 鍵やアプリの状態が変わったら再実行)
アプリ Attester / AS
│ │
│ 1. CIK 鍵ペアを生成 │
│ (TEE / Secure Enclave) │
│ │
│ 2. チャレンジ取得 │
│ ◄──────────────────────────────────── │
│ │
│ 3. OS API でデバイス証明を取得 │
│ (チャレンジ + CIK を織り込む) │
│ │
│ 4. デバイス証明 + CIK 公開鍵を送付 │
│ ──────────────────────────────────► 5. 証明を検証
│ │
│ 6. CAJ 発行(Attester 方式) │
│ or CIK 登録完了(自己署名方式) │
│ ◄──────────────────────────────────── │
【認証フェーズ】クライアント認証が必要なリクエスト毎
アプリ Authorization Server
│ │
│ 1. PoP JWT を CIK で署名 │
│ (aud / jti / iat) │
│ │
│ 2. OAuth-Client-Attestation + │
│ OAuth-Client-Attestation-PoP │
│ ──────────────────────────────────► 3. CAJ + PoP を検証
│ │
│ 4. トークン応答 or エラー │
│ ◄──────────────────────────────────── │