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.md
source content

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を生成します。

処理フロー(概念的):

  1. クライアント認証
  2. Login Hint解決(ユーザー特定)
  3. auth_req_id生成
  4. CibaGrant作成・保存
  5. デバイス通知(FCM)
  6. 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
    モジュールが有効か確認