メインコンテンツまでスキップ

CIBA(バックチャネル認証)

← 導入ガイドに戻る


PCでログイン開始し、スマホで生体認証して承認するフローを提供します。

CIBA(Client-Initiated Backchannel Authentication)は、ブラウザリダイレクトではなく、別デバイス(モバイル端末など)での認証承認を行うフローです。


概要図

┌───────────────────────────┐     ┌───────────────────────────┐
│ PCブラウザ / 窓口端末 │ │ モバイルアプリ │
│ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ [送金実行] │ │ │ │ 通知が届く │ │
│ └─────────────┘ │ │ │ │ │
│ │ │ │ │ 「10万円の送金 │ │
│ ↓ │ │ │ を承認しま │ │
│ 「スマホで承認して │ │ │ すか?」 │ │
│ ください」 │ │ │ │ │
│ │ │ │ [生体認証で │ │
│ ポーリング中... │ │ │ 承認] │ │
│ │ │ └─────────────┘ │
│ ↓ │ │ │ │
│ 送金完了 │ │ ↓ │
│ │ │ 承認完了 │
└───────────────────────────┘ └───────────────────────────┘

バックエンドの処理フロー

サービス              idp-server              モバイルアプリ
│ │ │
│ CIBA認証リクエスト │ │
│ (login_hint) │ │
│ ────────────────────→│ │
│ │ プッシュ通知 │
│ │ ──────────────────────→│
│ auth_req_id │ │
│ ←────────────────────│ │
│ │ │
│ ポーリング │ FIDO-UAF認証 │
│ (auth_req_id) │ (device_secret_jwt) │
│ ────────────────────→│ ←──────────────────────│
│ │ │
│ トークン発行 │ │
│ ←────────────────────│ │

できること

バックチャネル認証

ブラウザリダイレクトなしで、別デバイスでの認証を実現します。

  • 消費デバイスと認証デバイスの分離: PCで操作、スマホで承認
  • プッシュ通知: スマホに承認リクエストを送信
  • ポーリング/プッシュ/ピング: 3つの配信モードに対応
  • タイムアウト制御: 承認リクエストの有効期限を設定

FIDO-UAF デバイス認証

モバイルデバイスでの生体認証による承認を実現します。

  • デバイス自動登録: FIDO-UAF 登録フローでデバイスを自動登録
  • デバイスシークレット発行: JWT ベースのデバイス認証トークン
  • 生体認証: 指紋・顔認証でのワンタッチ承認

ユースケース例

  • 銀行の高額送金: 窓口やPCでの操作をスマホで承認
  • 決済の二段階承認: 決済確定前にスマホで最終確認
  • IoTデバイス: 画面のないデバイスでの認証
  • コールセンター: オペレーターの操作をユーザーが承認

導入時に決めること

1. CIBA配信モード

モード説明向いているケース
pollサービスが定期的にトークンエンドポイントをポーリングシンプルな実装、最も一般的
pushidp-serverがサービスのコールバックURLにトークンをPOSTリアルタイム性が必要
pingidp-serverがサービスに通知、サービスがトークンを取得push + poll のハイブリッド

idp-serverでの設定:

  • テナント設定でCIBA配信モードを指定
  • poll モードの場合はポーリング間隔を設定

2. デバイス登録フロー

決めること選択肢の例
登録タイミング初回ログイン後、任意のタイミング
最大デバイス数1台、3台、5台、無制限
デバイスシークレット有効期限30日、1年、無期限

idp-serverでの設定:

  • authentication_device_rule でデバイス登録ルールを設定
  • デバイスシークレットのアルゴリズムと有効期限を設定

3. 承認リクエストの制御

決めること選択肢の例
リクエスト有効期限60秒、120秒、300秒
ポーリング間隔3秒、5秒、10秒
ユーザーコード必須、不要

idp-serverでの設定:

  • CIBA設定でリクエスト有効期限とポーリング間隔を設定

4. 通知方法

決めること選択肢の例
プッシュ通知FCM(Android)、APNS(iOS)
フォールバックSMS通知、メール通知

idp-serverでの設定:

  • FIDO-UAFサーバーとの連携設定
  • プッシュ通知サービスの設定

まとめ

CIBAを導入する際の重要なポイント:

必ず決めること

  1. 配信モード: poll、push、ping
  2. デバイス登録フロー: 登録タイミング、最大台数、有効期限
  3. 承認リクエスト制御: 有効期限、ポーリング間隔
  4. 通知方法: プッシュ通知サービスの選択

idp-serverが提供すること

  • CIBA(poll/push/ping モード)の実装
  • FIDO-UAF デバイス登録・認証
  • デバイスシークレット発行(JWT Bearer Grant)
  • 認証リクエストの有効期限管理
  • ポーリング間隔制御

自分で実装すること

  • モバイル承認画面(UI)
  • FIDO-UAF 対応のモバイルアプリ
  • プッシュ通知の送信基盤(FCM/APNS)
  • サービス側のCIBAリクエスト・ポーリング処理

セキュリティの注意点

  • デバイスシークレットの安全な保管(Keychain/Keystore)
  • 承認リクエストの有効期限は短く設定(120秒程度推奨)
  • デバイス紛失時のリモート無効化手段を用意
  • 通知内容に取引金額等のコンテキスト情報を含め、フィッシング対策とする

テンプレートで試す

ローカル環境ですぐに試せるテンプレートが用意されています。

cd config/templates/use-cases/ciba
./setup.sh

セットアップ後の動作確認:

スクリプト内容
VERIFY.md基本動作確認
verify.shユーザー登録 + FIDO-UAF デバイス登録 + CIBAフロー検証
ciba-device-auth.shCIBAデバイス側認証の個別実行

詳細: config/templates/use-cases/ciba/

関連ドキュメント


最終更新: 2026-03-13