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

CIBA フロー

概要

idp-server は、OpenID Connect の拡張仕様である OpenID Connect CIBA (Client Initiated Backchannel Authentication) をサポートしています。

スマートフォン等のユーザー操作可能な端末を用いた非同期認証を実現し、以下のようなユースケースに最適です。

  • 生体認証・FIDOを用いたリモート承認
  • 金融機関の第二要素としての身元確認

シーケンス(抽象)

login_hint

idp-server は CIBA フローの login_hint パラメータに対して、複数の識別子形式をサポートしています。これにより、柔軟なユーザー特定が可能です。

CIBA 仕様 に準拠し、login_hint はユーザー識別のヒントとして使用されます。

サポート形式

以下のような接頭辞つきの拡張形式に対応しており、ユーザーの識別方法を柔軟に指定できます:

フォーマット意味
sub:<subject>内部ユーザーIDで直接識別sub:abc123
ex-sub:<subject>,idp:<id-provider>外部IdPのサブジェクトで識別ex-sub:ex-idp123,idp:ex-idp
device:<deviceId>,idp:<id-provider>認証デバイスで識別device:device123,idp:ex-idp
email:<email>,idp:<id-provider>メールアドレスによる識別email:foo@example.com,idp:idp-server
phone:<number>,idp:<id-provider>電話番号による識別phone:09012345678,idp:idp-server

id-provider のデフォルト値は idp-serverとなります。 フェデレーションによる外部IdPを利用してユーザーを作成している場合は、外部IdPプロバイダー名を指定することができます。

ユーザー通知・端末連携

  • ユーザー端末への通知は AuthenticationDeviceNotifier プラグインにより実行されます
    • デフォルト実装: FCM (Firebase Cloud Messaging) / APNs対応
    • 通知チャネルは AuthenticationDevice の設定で制御

認証方式

CIBA フローにおけるユーザー認証も、通常の認可コードフローと同様に認証ポリシーに従い実行されます。

  • Password 認証
  • Passkey 認証
  • FIDO-UAF 認証
  • Email / SMS OTP
  • 認可内容に応じた多段認証

認証ポリシー(概要)

通常の認可コードフローと同様に、認可対象のスコープ・acr_values などを条件に、認証の強度を制御することができます。

バインディングメッセージ(binding_message)

概要

binding_message は、消費デバイスと認証デバイスを視覚的に連動させ、ユーザーがトランザクションを確認できるようにするためのパラメータです。

OIDC CIBA仕様 Section 7.1より:

The binding_message is intended to be displayed on both the consumption device and the authentication device to interlock them together for the transaction by way of a visual cue for the end-user.

用途

用途説明
フィッシング対策ユーザーが正しいトランザクションを承認しているか確認確認コード: 1234
トランザクション確認金融取引等での取引内容確認振込: ¥50,000
セッション連動複数デバイス間でのセッション一致確認TX-ABCD-1234

制約

  • 最大長: 20文字
  • 文字種: プレーンテキスト(特殊文字は避けることを推奨)

バックエンド検証

idp-serverは、認証デバイスでユーザーが入力したbinding_messageと、CIBAリクエスト時に送信されたbinding_messageの一致を検証する機能を提供しています。

認証インタラクションタイプ: authentication-device-binding-message

詳細: How-To: CIBAバインディングメッセージのバックエンド検証

デリバリーモード

idp-serverは Poll・Push・Pingの3つのモードをサポートしています。

項目説明備考
Pollクライアントからポーリングを実施しトークンを取得する方式。
Pushユーザーの認証認可が完了した場合に、idp-serverからクライントにトークンをWebhookで連携する方式。FAPIでは利用不可。
Pingユーザーの認証認可が完了した場合に、idp-serverからクライントに完了通知をWebhookで連携する方式。クライントで完了通知を受け取るAPIの開発が必要

設定項目

idp-serverは、標準仕様に準拠した設定をサポートしています。

拡張設定

また、仕様には定義されていないけれど、CIBAフローを実現するために必要な項目も設定が可能となっています。

項目説明デフォルト
backchannel_authentication_request_expires_in認証リクエストの有効期限300秒
backchannel_authentication_polling_intervalポーリング間隔(pollモード)5秒
default_ciba_authentication_interaction_typeデフォルト認証インタラクションタイプauthentication-device-notification
required_backchannel_auth_user_codeバックチャネル認証でユーザーコード入力を必須とするかfalse
backchannel_auth_user_code_typeユーザーコードのタイプ(password / numericpassword

クライアント認証

このエンドポイントはクライアント認証を必要とします。 以下のクライアント認証方式に対応しています(Client Authentication):

認証方式説明
client_secret_basicAuthorizationヘッダにBasic認証形式で client_id / client_secret を送信(デフォルト)
client_secret_postclient_idclient_secret をリクエストボディに含めて送信
client_secret_jwtclient_secret を使って署名したJWTを client_assertion に含めて送信
private_key_jwt秘密鍵で署名したJWTを client_assertion に含めて送信。公開鍵は事前に登録されている必要あり
tls_client_auth(mTLS)クライアント証明書で相互TLS認証。サーバーは証明書のSubject DNやSANでクライアントを識別
self_signed_tls_client_auth自己署名クライアント証明書でTLS認証。証明書のフィンガープリントを事前に登録して認証を成立させる

FAPI

  • CIBA フローでも FAPI に対応しています。

便利機能

通常の認可コードフローと同様に、便利機能を利用することができます。

主な便利機能

  1. claims:xx スコープによるIDトークンクレームの動的設定
  2. verified_claims:xx スコープによるアクセストークンのプロパティの動的設定