Skip to content

[Phase 1 Sprint 2.5] infra(keycloak): User Storage SPI Provider 実装本体(Lookup/Query/Registration + email write-back) #728

Description

@win2cot

設計正本: ADR-0006 §3.1 / §3.2 / §3.4 / §3.5。親 tracker は別途 sub-issue 紐付け。
現状 keycloak/src/main/java/.../TasksWebApiUserStorageProviderUserAdapter は全メソッド TODO スタブ。これを実装する。

スコープ

  • JDBC 配線: SPI から users テーブルへ read(NO_CACHE、§3.5)
  • UserLookupProvider: getUserById(StorageId.externalId)/ getUserByUsername(= email)/ getUserByEmail。いずれも deleted_at IS NULL のみ返す
  • UserQueryProvider: searchForUserStream(ページング、Admin Console の user list)
  • UserRegistrationProvider:
    • addUser: Custom User Profile attribute(full_name_kana 等)経由で users へ insert、tenant 未所属で着地(§3.1)
    • removeUser: 実装済みの UserAnonymizationDomainService を 1 transaction で呼び出し、true 返却(§3.4)
  • UserAdapter:
    • read: full_name 等は read-only mapping
    • setEmail: Update-Email 到達検証後の write 戻し(users.email + version increment、@Version 楽観排他)。setFirstName/setLastName は no-op
    • credentialManager: 資格は Keycloak native store に委譲(§3.3、CredentialInputValidator 非実装)

受け入れ条件

  • getUserBy{Id,Username,Email}users から解決し、削除済(deleted_at)user を返さない
  • searchForUserStream がページングで Admin Console list に表示
  • addUser が tenant 未所属の users 行を作成(full_name_kana は Custom User Profile attribute 経由)
  • removeUserUserAnonymizationDomainService を呼び匿名化 + true 返却
  • setEmailusers.email へ write 戻し + 楽観排他(競合時エラー)
  • CredentialInputValidator は実装しない
  • NullAway / Spotless / 既存 CI gate 通過

注: full_name_kana の attribute 契約は realm 側 sub-issue(②)で定義。E2E 検証はテスト sub-issue(③)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/infraAWS インフラ(ECS Fargate / RDS / Keycloak / IAM)変更area/keycloakkeycloak/ サブプロジェクト変更priority/p1High。現スプリント内で完了必須task-type:implコード実装が主体のタスク

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions