Auth 바운디드 컨텍스트
1. 컨텍스트 정의
Auth 도메인은 사용자 인증, 토큰 관리, 세션 관리, 앱 보안 인증, OAuth 통합, 게스트 온보딩 및 Step-up 인증 등을 담당하는 바운디드 컨텍스트입니다.
1.1 주요 책임
- 사용자 인증 (Authentication)
- JWT 토큰 관리 (Token Management)
- 토큰 블랙리스트 관리 (Token Blacklist Management)
- 보안 정책 관리 (Security Policy Management)
- 다중 인증 관리 (MFA Management)
- 소셜 로그인 연동 (Social Login Integration)
- GesundheitsID 연동 (GesundheitsID Integration)
- 앱 보안 인증 (App Security Authentication)
- 회원가입 프로세스 조정 (Orchestrate Registration Process, 협력)
- 게스트 온보딩 및 Step-up 인증 오케스트레이션
1.2 도메인 용어
- Authentication: 사용자 신원 확인 절차
- JWT Token: JSON Web Token 기반 인증 토큰
- Refresh Token: JWT 토큰 갱신을 위한 토큰
- Access Token: 사용자 인증 및 권한 정보를 포함한 JWT 토큰으로, 동의(Consent) 정보도 포함 (Consent 도메인 참조)
- App Token: 로그인 전 API 호출을 위한 토큰, 앱 무결성 검증 후 발급
- Device Identifier: 장치 식별을 위한 정보로 SHA-256으로 해싱하여 관리
- Challenge-Response: 앱 무결성 검증을 위한 시간 기반 질의-응답 메커니즘
- Token Blacklist: JWT 토큰 무효화 관리 정보
- MFA: Multi-Factor Authentication (다중 인증)
- Social Login: 외부 서비스를 통한 인증
- Security Policy: 보안 정책 (비밀번호 정책, 세션 정책 등)
- GesundheitsID: 독일 의료 시스템에서 사용되는 디지털 건강 ID
- Guest Account: 약관 동의만으로 생성된 제한 사용자 계정
- IdentityLevel: 토큰 및 계정이 가진 신원 검증 수준 (
guest,registered,mfa등) - Step-up Authentication: 게스트 계정이 추가 인증 수단을 연동하여 정규 사용자로 전환하는 과정
- LinkSession: Step-up 플로우를 추적하기 위한 임시 세션 컨텍스트
1.3 값 객체 (Value Objects)
- Email: 사용자 이메일 주소 (로그인 ID)
- PasswordHash: 해싱된 사용자 비밀번호
- RefreshToken: 리프레시 토큰 값
- DeviceId: 사용자의 기기 식별자
- TokenJti: JWT 토큰의 고유 식별자 (jti 클레임)
- LoginAttempt: 로그인 시도 정보 (성공/실패, 시간 등)
- IdentityLevel: 토큰에 포함되는 신원 검증 수준을 나타내는 값 객체
- GuestAccountId: 게스트 계정을 식별하기 위한 내부 식별자 값 객체
- LinkSessionId: Step-up 인증 세션을 추적하는 임시 식별자
2. 하위 컨텍스트
2.1 인증 컨텍스트 (Authentication Context)
사용자 신원 확인과 토큰 관리를 담당합니다.
책임
- 사용자 로그인/로그아웃 처리
- JWT 토큰 발급 및 검증 (Access Token, Refresh Token)
- 리프레시 토큰 관리
- 다중 인증(MFA) 관리
- 소셜 로그인 처리 (GesundheitsID)
- 게스트 온보딩 및 Step-up 인증 플로우 조율
정책 및 규칙
-
인증 정책
- 비밀번호 복잡도 요구사항
- 로그인 시도 제한
- 세션 타임아웃 설정
- MFA 적용 규칙
-
토큰 관리 정책
- 토큰 유효기간 설정
- 토큰 갱신 정책
- 토큰 폐기 정책
identityLevel승격 시 기존 토큰 블랙리스트 처리- 게스트 토큰에 대한 단일 디바이스 바인딩 강제
-
GesundheitsID 연동 정책
- GesundheitsID 유효성 검증
- 연동 상태 관리
- 인증 데이터 보안
2.2 토큰 관리 컨텍스트 (Token Management Context)
JWT 토큰 라이프사이클 및 블랙리스트 관리를 담당합니다.
책임
- JWT 토큰 발급 및 검증
- 토큰 무효화 및 블랙리스트 관리
- 동시 토큰 제어 (단일 디바이스 토큰 강제)
- 토큰 메타데이터 관리 (발급 디바이스 정보 등)
- 토큰
identityLevel및deviceBinding메타 관리
정책 및 규칙
- 토큰 관리 정책
- 토큰 유효기간 설정
- 동시 활성 토큰 수 제한 (1개)
- 새 로그인 시 이전 토큰 자동 무효화
- 토큰 블랙리스트 보안 관리
identityLevel기반 접근 제어 캐시 동기화- 익명/게스트 토큰 발급은 유효한
appToken인증이 있는 경우에만 허용하며, 기본 클레임은tier=anonymous,allowed_domains=["faq","docs-public","agent-help-public"],data_persistence=none을 포함한다. 토큰이 없거나tier누락 시 anonymous로 간주하고 컨텍스트는 NOT_READY로 폴백한다.
2.3 앱 보안 인증 컨텍스트 (App Security Context)
클라이언트 앱의 보안 및 무결성 검증을 담당합니다.
책임
- 디바이스 식별 및 등록
- 앱 토큰 발급 및 관리
- 앱 무결성 검증 (챌린지-응답)
- 디바이스 블랙리스트 관리
- 게스트 온보딩 시 디바이스 신뢰도 검증 및 지역 매핑
정책 및 규칙
-
디바이스 ID 관리 정책
- 디바이스 정보 해싱 (SHA-256)
- 앱 시크릿을 솔트로 사용 (선택적)
- 원본 디바이스 정보 보호
-
앱 무결성 검증 정책
- 시간 기반 챌린지-응답 메커니즘
- 챌린지 유효기간
- 검증 실패 시 접근 차단
- 연속 실패 시 디바이스 블랙리스트 등록
3. 컨텍스트 경계
3.1 상위 컨텍스트
- User Domain: 사용자 정보 관리 (사용자 조회, 상태 확인 등)
- IAM Domain: 역할 및 권한 정보 관리 (토큰 내 권한 포함 목적)
3.2 협력 컨텍스트 (Sub-domains/Supporting Domains)
- Access Code Domain: 회원가입 시 Access Code 검증 요청
- Terms Domain: 회원가입/로그인 시 필요한 약관 정보 조회, 사용자 약관 동의 기록 요청
- Consent Domain: 회원가입/로그인 시 필요한 동의 정보 조회, 사용자 동의 기록 요청, 토큰 내 포함할 동의 상태 조회
- Audit Domain: 인증 및 보안 관련 이벤트 로깅 요청
- Notification Domain: 이메일/SMS 인증 코드 발송 요청, 보안 알림 발송 요청
- Group Domain: 게스트 및 정규 사용자 그룹 할당 동기화 이벤트 수신
- Plan Domain: 게스트 플랜 부여 및 승격 후 플랜 재조정 이벤트 수신
3.3 외부 시스템
- OAuth Providers (GesundheitsID): 외부 인증 제공자
- TimeMachine: 시간 관련 처리 (토큰 만료 등) 시 현재 시간 조회
4. 컨텍스트 매핑
4.1 User Domain과의 관계 (Customer-Supplier)
4.2 IAM Domain과의 관계 (Conformist)
4.3 Access Code Domain과의 관계 (Customer-Supplier)
4.4 Terms Domain과의 관계 (Open Host Service / Published Language)
4.5 Consent Domain과의 관계 (Open Host Service / Published Language)
4.6 Audit Domain과의 관계 (Published Language)
4.7 Notification Domain과의 관계 (Customer-Supplier)
4.8 Group Domain과의 관계 (Published Language)
4.9 Plan Domain과의 관계 (Published Language)
4.8 GesundheitsID API와의 관계 (Anti-corruption Layer)
5. 도메인 이벤트
5.1 발행하는 이벤트
- UserAuthenticated: 사용자 인증 완료
- UserLoggedOut: 사용자 로그아웃
- TokenIssued: 새로운 토큰 발급
- TokenRevoked: 토큰 폐기
- SessionCreated: 새로운 세션 생성
- SessionExpired: 세션 만료
- SecurityPolicyUpdated: 보안 정책 업데이트 (해당 책임이 Auth 내에 있다면)
- DeviceRegistered: 새로운 디바이스 등록
- AppTokenIssued: 앱 토큰 발급
- AppIntegrityVerified: 앱 무결성 검증 성공
- AppIntegrityViolated: 앱 무결성 검증 실패
- DeviceBlacklisted: 디바이스 블랙리스트 등록
- ChallengeIssued: 보안 챌린지 생성
- ChallengeVerified: 보안 챌린지 검증 완료
- GesundheitsIDLinked: GesundheitsID 연결됨
- GesundheitsIDUnlinked: GesundheitsID 연결 해제됨
- GesundheitsIDLoginSucceeded: GesundheitsID로 로그인 성공
- GesundheitsIDLoginFailed: GesundheitsID로 로그인 실패
- EmailVerificationCodeSent: 이메일 인증 코드 발송됨
- EmailVerificationCompleted: 이메일 인증 완료됨
- PasswordResetRequested: 비밀번호 재설정 요청됨
- PasswordChanged: 비밀번호 변경됨
- AccountLocked: 계정 잠김
- AccountUnlocked: 계정 잠금 해제됨
5.2 구독하는 이벤트
- UserCreated (from User): 새로운 사용자 생성
- UserDeactivated (from User): 사용자 비활성화 (관련 세션 종료 등 처리)
- SecurityPolicyUpdated (from IAM/Admin): 보안 정책 변경 시 반영
6. 보안 정책
- JWT 토큰 보안 관리 (서명, 만료, HTTPS 전송)
- 키 로테이션 및 관리
- 토큰 블랙리스트 관리 (로그아웃, 비활성화 시)
- 세션 데이터 암호화 (필요시)
- 관리자 권한 분리 (IAM 연동)
- 감사 로그 기록 (Audit 도메인 연동)
- 디바이스 ID 해싱 (SHA-256)
- 앱 무결성 검증 절차 (Challenge-Response)
- 디바이스 블랙리스트 관리
- GesundheitsID 연동 정보 보안 (토큰 암호화 저장 등)
6.1 MAO 티어/동의/라우팅 연계
- Auth BC는 토큰에
tier(anonymous/guest/member),consent_version,allowed_domains,data_persistence클레임을 포함해 발급하고, Chat/MAO BC는 이를 소비한다. - anonymous/guest 클레임이거나
tier가 없는 경우 컨텍스트 어셈블러가 NOT_READY로 폴백하도록 기본값을 제공한다. - guest→member 승격 이벤트 발생 시 기존 토큰 블랙리스트 처리 및 재발급을 Auth BC 책임으로 둔다.
7. 기술 스택
- NestJS, TypeScript
- PostgreSQL (사용자 인증 정보, 세션 정보 일부 등)
- Redis (토큰 블랙리스트, 활성 세션 캐시, 챌린지 캐싱, Rate Limiting 등)
- GCP Pub/Sub (이벤트 메시징)
- JWT (토큰 기반 인증)
- SHA-256 (디바이스 ID 해싱)
- AES-256-CBC (챌린지-응답 암호화 등)
8. 변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|---|---|---|
| 0.1.0 | 2025-03-16 | bok@weltcorp.com | 최초 작성 |
| 0.2.0 | 2025-03-17 | bok@weltcorp.com | 컨센트 토큰 관련 내용 추가 |
| 0.3.0 | 2025-03-18 | bok@weltcorp.com | Terms 컨텍스트 내용 통합 및 구조 개선 |
| 0.4.0 | 2025-03-21 | bok@weltcorp.com | 권한 관련 책임을 IAM 도메인으로 이전 |
| 0.5.0 | 2025-03-29 | bok@weltcorp.com | 앱 보안 인증 컨텍스트 추가 및 디바이스 ID 해싱 기반 방식 적용 |
| 0.6.0 | 2025-04-10 | bok@weltcorp.com | GesundheitsID 인증 및 약관 관리 컨텍스트 추가 |
| 0.7.0 | 2025-04-15 | bok@weltcorp.com | TokenPayload에 consents 필드 추가, ConsentToken 제거 및 Access Token으로 통합 |
| 0.8.0 | 2025-04-29 | bok@weltcorp.com | Terms 및 Consent 도메인 분리 반영 (책임, 용어, 컨텍스트, 이벤트 제거 및 매핑/의존성 업데이트) |
| 0.9.0 | 2025-08-11 | bok@weltcorp.com | JWT stateless 인증 방식에 맞게 컨텍스트 수정: 세션 관리 → 토큰 관리 컨텍스트로 변경, 토큰 블랙리스트 관리 책임 추가, 값 객체 섹션 재배치 및 SessionId → TokenJti 변경 |
| 1.0.0 | 2025-11-26 | bok@weltcorp.com | MAO 라우팅을 위한 tier/consent/allowed_domains/data_persistence 클레임 책임과 guest 승격 시 토큰 블랙리스트 처리 책임 추가 |