背景
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 本実現)への進化を追跡するもの。 現行機能に影響なし。
本配線に必要な作業(調査済みブロッカー)
- JDBC ドライバをイメージへ: SPI は生
DriverManager 接続。KC 本番イメージに MySQL コネクタ未同梱(keycloak/Dockerfile:24 は SPI JAR のみ COPY、ドライバは test 専用 build.gradle.kts)。/opt/keycloak/providers/ へコネクタ JAR 追加が必要。
- realm-export に component 追加:
keycloak/realm-export/tasks-realm.json に UserStorageProvider(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。
- 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 未接続。
- 既存シードユーザーの重複解消(破壊的):
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 のローカルユーザー削除が必要。
- 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
背景
ADR-0006 の User Storage SPI(app
usersを Keycloak に federation)は SPI JAR は KC イメージに焼込済・機能実装済みだが、どの環境の realm-export にもUserStorageProvidercomponent が未配線(dead code)。現在の dev/MVP は「ローカル Keycloak ユーザー + OIDC correlation」モデルで動作しており、会員登録〜ログインはフルフローで動作(#843 で dev 実機 green 確認済み)。#858 の find-or-create は本モデルの正式実装であり、かつ SPI 有効化時も検索ヒットで作成しない安全な superset。
本 Issue は機能不具合ではなく、将来アーキ(ADR-0006 の federation 本実現)への進化を追跡するもの。 現行機能に影響なし。
本配線に必要な作業(調査済みブロッカー)
DriverManager接続。KC 本番イメージに MySQL コネクタ未同梱(keycloak/Dockerfile:24は SPI JAR のみ COPY、ドライバは test 専用build.gradle.kts)。/opt/keycloak/providers/へコネクタ JAR 追加が必要。keycloak/realm-export/tasks-realm.jsonにUserStorageProvider(providerId: tasks-webapi-user-storage、configjdbcUrl/dbUsername/dbPassword/cachePolicy: NO_CACHE/enabled/priority)。参考実装は test realmkeycloak/src/test/resources/tasks-test-realm.json:58-73。start-devで MySQL 未接続。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 のローカルユーザー削除が必要。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 相当のエピック)。
スコープ判断
Refs #843, ADR-0006, ADR-0040