name: ciba description: CIBA(Client Initiated Backchannel Authentication)機能の開発・修正を行う際に使用。Poll/Push/Pingモード、Login Hint解決、FCM通知実装時に役立つ。
CIBA(Client Initiated Backchannel Authentication)開発ガイド
ドキュメント
documentation/docs/content_06_developer-guide/03-application-plane/06-ciba-flow.md- CIBA実装ガイドdocumentation/docs/content_03_concepts/03-authentication-authorization/concept-04-authorization.md- 認可概念(CIBA含む)documentation/docs/content_10_ai_developer/ai-31-extension-ciba.md- AI開発者向けCIBAガイド
機能概要
CIBAは、クライアントがバックチャネル経由でユーザー認証を要求するフロー。
- 3つのモード: Poll(ポーリング)、Push(通知)、Ping(通知+ポーリング)
- Login Hint解決: sub:, email:, phone: プレフィックスでユーザー特定
- Binding Message: ユーザーへの確認メッセージ表示
- ID Token Hint: 既存ID Tokenでユーザー特定
- User Code: ユーザー入力コードによる認証
- デバイス通知: FCM push通知
モジュール構成
libs/
├── idp-server-core-extension-ciba/ # CIBA拡張モジュール
│ └── .../core/extension/ciba/
│ ├── handler/
│ │ └── CibaRequestHandler.java # CIBA認証リクエスト処理
│ ├── CibaRequestContext.java # CIBAリクエストコンテキスト
│ ├── grant/
│ │ ├── CibaGrant.java
│ │ ├── CibaGrantFactory.java
│ │ └── CibaGrantService.java # CIBAグラント管理
│ ├── request/
│ │ └── BackchannelAuthenticationRequest.java
│ ├── response/
│ │ └── BackchannelAuthenticationResponse.java
│ └── repository/
│ └── CibaGrantRepository.java
│
├── idp-server-notification-fcm-adapter/ # FCM通知アダプター
│ └── .../notification/fcm/
│ └── FcmNotificationSender.java
│
└── idp-server-control-plane/ # 管理API
└── .../management/ciba/
└── CibaConfigManagementApi.java
CIBA認証リクエスト処理
idp-server-core-extension-ciba/.../core/extension/ciba/handler/CibaRequestHandler.java 内:
CibaRequestHandlerは、BackchannelAuthenticationRequestを処理し、 BackchannelAuthenticationResponseを生成します。
処理フロー(概念的):
- クライアント認証
- Login Hint解決(ユーザー特定)
- auth_req_id生成
- CibaGrant作成・保存
- デバイス通知(FCM)
- BackchannelAuthenticationResponse返却
CIBAグラント管理
idp-server-core-extension-ciba/grant/ 内:
// CibaGrantは認証状態を管理
public class CibaGrant {
AuthReqId authReqId;
UserId userId;
ClientId clientId;
Scope scope;
GrantStatus status; // PENDING, AUTHENTICATED, EXPIRED
public boolean isAuthenticated() {
return status == GrantStatus.AUTHENTICATED;
}
}
CibaGrantServiceとCibaGrantVerifierが、グラントのライフサイクルを管理します。
FCM通知
idp-server-notification-fcm-adapter/ モジュール内:
FCM (Firebase Cloud Messaging)を使用して、認証デバイスに通知を送信します。
E2Eテスト
e2e/src/tests/
├── spec/
│ ├── ciba_authentication_request.test.js # CIBA認証リクエスト
│ ├── ciba_token_request.test.js # CIBAトークンリクエスト
│ ├── ciba_push.test.js # Pushモード
│ ├── ciba_ping.test.js # Pingモード
│ └── ciba_discovery.test.js # CIBA Discovery
│
├── scenario/application/
│ └── scenario-04-ciba-mfa.test.js # CIBA MFAシナリオ
│
├── usecase/ciba/
│ ├── ciba-01-require-rar.test.js # RAR必須
│ ├── ciba-02-multi-device-priority.test.js # マルチデバイス優先度
│ └── ciba-04-security-event-device-ids.test.js
│
└── monkey/
└── ciba-monkey.test.js # CIBAファジングテスト
コマンド
# ビルド
./gradlew :libs:idp-server-core-extension-ciba:compileJava
./gradlew :libs:idp-server-notification-fcm-adapter:compileJava
# テスト
cd e2e && npm test -- spec/ciba_authentication_request.test.js
cd e2e && npm test -- spec/ciba_push.test.js
cd e2e && npm test -- usecase/ciba/
トラブルシューティング
Login Hint解決失敗
- プレフィックス(sub:, email:, phone:)が正しいか確認
- ユーザーが存在するか確認
Pollモードでauthorization_pending
- ユーザーがまだ認証を完了していない(正常動作)
interval秒待ってから再ポーリング
FCM通知が届かない
- FCMトークンが登録されているか確認
- Firebase設定(credentials.json)が正しいか確認
idp-server-notification-fcm-adapterモジュールが有効か確認