Claude-skill-registry ciba
CIBA(Client Initiated Backchannel Authentication)機能の開発・修正を行う際に使用。Poll/Push/Pingモード、Login Hint解決、FCM通知実装時に役立つ。
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ciba" ~/.claude/skills/majiayu000-claude-skill-registry-ciba && rm -rf "$T"
manifest:
skills/data/ciba/SKILL.mdsource content
CIBA(Client Initiated Backchannel Authentication)開発ガイド
ドキュメント
- CIBA実装ガイド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
- AI開発者向けCIBAガイドdocumentation/docs/content_10_ai_developer/ai-31-extension-ciba.md
機能概要
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