Skip to content

ADR-0006 SPI federation の realm 本配線(将来: 共有 IdP 進化と統合) #862

Description

@win2cot

背景

ADR-0006 の User Storage SPI(app users を Keycloak に federation)は SPI JAR は KC イメージに焼込済・機能実装済みだが、どの環境の realm-export にも UserStorageProvider component が未配線(dead code)。

現在の dev/MVP は「ローカル Keycloak ユーザー + OIDC correlation」モデルで動作しており、会員登録〜ログインはフルフローで動作(#843 で dev 実機 green 確認済み)#858 の find-or-create は本モデルの正式実装であり、かつ SPI 有効化時も検索ヒットで作成しない安全な superset

本 Issue は機能不具合ではなく、将来アーキ(ADR-0006 の federation 本実現)への進化を追跡するもの。 現行機能に影響なし。

本配線に必要な作業(調査済みブロッカー)

  1. JDBC ドライバをイメージへ: SPI は生 DriverManager 接続。KC 本番イメージに MySQL コネクタ未同梱(keycloak/Dockerfile:24 は SPI JAR のみ COPY、ドライバは test 専用 build.gradle.kts)。/opt/keycloak/providers/ へコネクタ JAR 追加が必要。
  2. realm-export に component 追加: keycloak/realm-export/tasks-realm.jsonUserStorageProvider(providerId: tasks-webapi-user-storage、config jdbcUrl/dbUsername/dbPassword/cachePolicy: NO_CACHE/enabled/priority)。参考実装は test realm keycloak/src/test/resources/tasks-test-realm.json:58-73
  3. KC→app DB のネットワーク経路 + DB 資格: KC は platform-dev-cluster、app DB(RDS)は tasks スタック。クロススタック経路 + SG + KC 用 DB 認証(IAM auth vs user/pass は要決定)。ローカル dev の KC は H2 start-dev で MySQL 未接続。
  4. 既存シードユーザーの重複解消(破壊的): admin@/tenant1-*@example.com は realm-export ローカルユーザーと app DB seed(V1.0.0_02__seed_dev_data.sql:8-12、同一 UUID で correlation)の両方に存在。federation 有効化で identity 二重化 → ログイン破綻。realm-export のローカルユーザー削除が必要。
  5. credential 再プロビジョン: SPI は CredentialInputValidator 非実装(ADR-0006 §3.3)。ローカルユーザー削除後、federated 側は無パスワード。全対象の credential を KC native store へ再投入が必要。

prod 方針との関係

ADR-0006 §3.5 は本番 Keycloak を platform 共有 IdP(マルチ realm・per-realm SPI 設定) へ寄せる想定。本 repo の realm-export に焼くのが正しい着地とは限らず、共有 IdP 化と統合して設計する必要がある(= ADR-0040 PR3/PR4 + ADR-0006 Sprint1 Infra 相当のエピック)。

スコープ判断

  • 会員登録・ログインは現状で完全動作のため MVP ブロッカーではない
  • 着手時は上記 5 点を段階 PR 化し、各段で dev-smoke green を維持すること。

Refs #843, ADR-0006, ADR-0040

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions