본문으로 건너뛰기

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 인증 플로우 조율

정책 및 규칙

  1. 인증 정책

    • 비밀번호 복잡도 요구사항
    • 로그인 시도 제한
    • 세션 타임아웃 설정
    • MFA 적용 규칙
  2. 토큰 관리 정책

    • 토큰 유효기간 설정
    • 토큰 갱신 정책
    • 토큰 폐기 정책
    • identityLevel 승격 시 기존 토큰 블랙리스트 처리
    • 게스트 토큰에 대한 단일 디바이스 바인딩 강제
  3. GesundheitsID 연동 정책

    • GesundheitsID 유효성 검증
    • 연동 상태 관리
    • 인증 데이터 보안

2.2 토큰 관리 컨텍스트 (Token Management Context)

JWT 토큰 라이프사이클 및 블랙리스트 관리를 담당합니다.

책임

  • JWT 토큰 발급 및 검증
  • 토큰 무효화 및 블랙리스트 관리
  • 동시 토큰 제어 (단일 디바이스 토큰 강제)
  • 토큰 메타데이터 관리 (발급 디바이스 정보 등)
  • 토큰 identityLeveldeviceBinding 메타 관리

정책 및 규칙

  1. 토큰 관리 정책
    • 토큰 유효기간 설정
    • 동시 활성 토큰 수 제한 (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)

클라이언트 앱의 보안 및 무결성 검증을 담당합니다.

책임

  • 디바이스 식별 및 등록
  • 앱 토큰 발급 및 관리
  • 앱 무결성 검증 (챌린지-응답)
  • 디바이스 블랙리스트 관리
  • 게스트 온보딩 시 디바이스 신뢰도 검증 및 지역 매핑

정책 및 규칙

  1. 디바이스 ID 관리 정책

    • 디바이스 정보 해싱 (SHA-256)
    • 앱 시크릿을 솔트로 사용 (선택적)
    • 원본 디바이스 정보 보호
  2. 앱 무결성 검증 정책

    • 시간 기반 챌린지-응답 메커니즘
    • 챌린지 유효기간
    • 검증 실패 시 접근 차단
    • 연속 실패 시 디바이스 블랙리스트 등록

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.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.02025-03-16bok@weltcorp.com최초 작성
0.2.02025-03-17bok@weltcorp.com컨센트 토큰 관련 내용 추가
0.3.02025-03-18bok@weltcorp.comTerms 컨텍스트 내용 통합 및 구조 개선
0.4.02025-03-21bok@weltcorp.com권한 관련 책임을 IAM 도메인으로 이전
0.5.02025-03-29bok@weltcorp.com앱 보안 인증 컨텍스트 추가 및 디바이스 ID 해싱 기반 방식 적용
0.6.02025-04-10bok@weltcorp.comGesundheitsID 인증 및 약관 관리 컨텍스트 추가
0.7.02025-04-15bok@weltcorp.comTokenPayload에 consents 필드 추가, ConsentToken 제거 및 Access Token으로 통합
0.8.02025-04-29bok@weltcorp.comTerms 및 Consent 도메인 분리 반영 (책임, 용어, 컨텍스트, 이벤트 제거 및 매핑/의존성 업데이트)
0.9.02025-08-11bok@weltcorp.comJWT stateless 인증 방식에 맞게 컨텍스트 수정: 세션 관리 → 토큰 관리 컨텍스트로 변경, 토큰 블랙리스트 관리 책임 추가, 값 객체 섹션 재배치 및 SessionId → TokenJti 변경
1.0.02025-11-26bok@weltcorp.comMAO 라우팅을 위한 tier/consent/allowed_domains/data_persistence 클레임 책임과 guest 승격 시 토큰 블랙리스트 처리 책임 추가