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 | サービスが定期的にトークンエンドポイントをポーリング | シンプルな実装、最も一般的 |
| push | idp-serverがサービスのコールバックURLにトークンをPOST | リアルタイム性が必要 |
| ping | idp-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を導入する際の重要なポイント:
必ず決めること
- 配信モード: poll、push、ping
- デバイス登録フロー: 登録タイミング、最大台数、有効期限
- 承認リクエスト制御: 有効期限、ポーリング間隔
- 通知方法: プッシュ通知サービスの選択
idp-serverが提供すること
- CIBA(poll/push/ping モード)の実装
- FIDO-UAF デバイス登録・認証
- デバイスシークレット発行(JWT Bearer Grant)
- 認証リクエストの有効期限管理
- ポーリング間隔制御
自分で実装すること
- モバイル承認画面(UI)
- FIDO-UAF 対応のモバイルアプリ
- プッシュ通知の送信基盤(FCM/APNS)
- サービス側のCIBAリクエスト・ポーリング処理