1
0
forked from baron/baron-sso
Files
baron-sso/docs/employee_id_login_design.md
chan d10f80d41d feat: 커스텀 필드 기반 로그인 ID 연동 기능 추가 (#440)
- Kratos Identity 스키마에 로그인 전용 `id` 속성 추가
- 테넌트 Config의 `loginIdField` 설정에 따라 User의 `login_id` 및 Kratos `traits.id` 동기화 로직 구현
- Admin UI 테넌트 스키마 설정 내 '로그인 ID로 사용' 체크박스 추가
- Admin UI 사용자 생성/수정/조회 화면에 로그인 ID 관리 필드 및 컬럼 반영
- Userfront 로그인 화면 접속 시 테넌트 설정에 따라 동적 로그인 ID 라벨 적용
- 관련 다국어(ko/en) 번역 추가 및 로그인 ID 설계 문서 업데이트
2026-03-25 15:27:44 +09:00

2.7 KiB

커스텀 필드 기반 로그인 ID 연동 설계 문서 (구 사번 로그인)

1. 개요

기존에 고정된 사번(employee_id) 필드를 사용하려던 설계를 변경하여, 테넌트별로 지정한 커스텀 필드를 실제 로그인 식별자로 사용할 수 있도록 하는 범용적인 로그인 ID 체계를 구축합니다.

2. 시스템별 변경 사항

2.1. Ory Kratos (인증 서버)

  • Identity Schema: traits 내에 id 필드를 추가합니다.
  • Identifier 설정: traits.idcredentials.password.identifier로 설정하여 로그인 시 식별자로 사용할 수 있게 합니다.
  • 특징: 이 필드는 '사번', '학번', 'ID' 등 테넌트의 성격에 따라 다양한 용도로 활용되는 범용 식별자 역할을 합니다.

2.2. Backend (baron-sso-backend)

데이터 모델 (domain.User)

  • login_id (string) 컬럼 추가.
  • idx_tenant_login_id 복합 유니크 인덱스 생성: (tenant_id, login_id).

테넌트 설정 (domain.Tenant)

  • Config 내에 loginIdField 설정을 추가합니다.
  • 이 설정은 해당 테넌트의 userSchema 중 어떤 필드(key)가 로그인 ID로 사용될지를 저장합니다.

동기화 로직 (UserHandler)

  • 사용자 생성/수정 시:
    1. 테넌트의 loginIdField 설정을 조회합니다.
    2. 설정된 필드가 있다면 사용자의 Metadata에서 해당 값을 추출합니다.
    3. 추출된 값을 Kratos의 traits.id와 로컬 DB의 login_id 컬럼에 동기화합니다.
  • 대량 등록 (Bulk Import): CSV/JSON 업로드 시에도 동일한 동기화 로직이 적용됩니다.

2.3. Frontend (adminfront)

테넌트 스키마 관리 (TenantSchemaPage)

  • 커스텀 필드 정의 시 "로그인 ID로 사용" 체크박스를 추가합니다.
  • 이 체크박스를 선택하면 해당 필드의 key가 테넌트 Config.loginIdField에 저장됩니다.

사용자 관리 (UserCreatePage, UserDetailPage)

  • 기본 정보 영역에 "로그인 ID" 필드를 노출하여 직접 관리할 수 있게 합니다.

2.4. Frontend (userfront)

로그인 페이지 (LoginScreen)

  • URL의 companyCode 또는 도메인을 통해 테넌트를 식별합니다.
  • 해당 테넌트에 loginIdField가 설정되어 있다면, 로그인 입력란의 라벨을 해당 커스텀 필드의 라벨(예: "사번")로 동적으로 변경합니다.

3. 기대 효과

  • 테넌트별로 상이한 로그인 식별자 요구사항(사번, 학생번호, 커스텀 ID 등)을 코드 수정 없이 유연하게 수용할 수 있습니다.
  • 이메일, 전화번호 외의 추가적인 로그인 수단을 제공하여 사용자 편의성을 높입니다.