# Baron SSO Architecture Review ## 문서 목적 본 문서는 Baron SSO 시스템의 전체 아키텍처를 이해하고, 팀 아키텍처 리뷰 시 설명할 수 있도록 작성한 분석 문서이다. --- # 0. 작업 개요 | 항목 | 내용 | |-----|-----| | 작업명 | 요청과업1 - Baron-SSO Architecture Review | | 작업일 | 2026-06-15 | | 시작 | 09:30 | | 종료 | 16:00 | | 휴게시간 | 12:00 \~ 13:00 | | 총 작업시간 | 약6시간 30분 | | 작업자 | 문형석 책임연구원 | --- # 1. 시스템 개요 Baron SSO는 그룹사 및 사내 시스템의 인증(Authentication)과 인가(Authorization)를 통합 관리하기 위한 IAM(Identity & Access Management) 플랫폼이다. 주요 목적 * 통합 로그인(SSO) * OAuth2 / OIDC 제공 * 사용자 인증 * 권한 관리 * 조직 관리 * 개발자 애플리케이션 연동 지원 --- # 2. 전체 아키텍처 ```mermaid flowchart TD User[사용자] Gateway[Gateway] UF[UserFront] AF[AdminFront] DF[DevFront] OF[OrgFront] Backend[Backend
Go + Fiber] Kratos[Kratos] Hydra[Hydra] Keto[Keto] Oathkeeper[Oathkeeper] PG[(PostgreSQL)] Redis[(Redis)] CH[(ClickHouse)] User --> Gateway Gateway --> UF Gateway --> AF Gateway --> DF Gateway --> OF UF --> Backend AF --> Backend DF --> Backend OF --> Backend Backend --> Kratos Backend --> Hydra Backend --> Keto Backend --> Oathkeeper Backend --> PG Backend --> Redis Oathkeeper --> Hydra Oathkeeper --> Keto Backend --> CH ``` --- # 3. 상위 컴포넌트 역할 ## Gateway 역할 * 모든 외부 요청 진입점 * Reverse Proxy * URL Routing 예시 ```text / → UserFront /api/* → Backend /auth/* → Kratos /oidc/* → Hydra ``` --- ## Frontend ### UserFront 일반 사용자용 기능 * 로그인 * 회원가입 * 비밀번호 찾기 * QR 로그인 * 내 정보 ### AdminFront 시스템 관리자용 기능 * 사용자 관리 * 권한 관리 * 시스템 관리 ### DevFront 개발자 포털 기능 * OAuth Client 등록 * OIDC 설정 * API 연동 ### OrgFront 조직도 관리 포털 대상 * 회사 내부 사용자 기능 * 조직도 관리 * 부서 관리 * 조직 구성원 관리 외부 사용자는 사용하지 않는 것으로 판단 --- # 4. Backend 구조 Backend는 Go 기반 Layered Architecture 구조 ```mermaid flowchart TD Handler[Handler] Service[Service] Repository[Repository] DB[(Database)] Handler --> Service Service --> Repository Repository --> DB ``` 설명 Handler * API 요청 수신 Service * 업무 로직 수행 Repository * DB 접근 Database * 실제 데이터 저장 --- # 5. Ory Stack ```mermaid flowchart LR Kratos[Kratos
Authentication] Hydra[Hydra
OAuth2/OIDC] Keto[Keto
Authorization] Oathkeeper[Oathkeeper
API Protection] Oathkeeper --> Hydra Oathkeeper --> Keto ``` ## Kratos 인증 * 로그인 * 회원가입 * 세션 ## Hydra 토큰 발급 * Access Token * ID Token ## Keto 권한 판단 * 사용 가능 여부 확인 ## Oathkeeper 문지기 * 토큰 검사 * 권한 검사 --- # 6. 로그인 인증 흐름 (Kratos 중심) ## 목적 사용자의 신원을 확인하고 로그인 세션을 생성한다. ## 담당 컴포넌트 ```text Kratos ``` --- ## Mermaid ```mermaid sequenceDiagram participant U as 사용자 participant GW as Gateway participant FE as UserFront participant BE as Backend participant KRA as Kratos participant DB as PostgreSQL U->>GW: localhost:5000 접속 GW->>FE: 로그인 화면 제공 FE-->>U: Login Page U->>FE: ID / PW 입력 FE->>GW: 로그인 요청 GW->>BE: POST /api/v1/auth/password/login BE->>KRA: 사용자 인증 요청 KRA-->>BE: 인증 성공 KRA-->>BE: Session 생성 BE->>DB: 로그인 이력 저장 BE-->>FE: 로그인 성공 FE-->>U: Dashboard 이동 ``` --- ## 생성되는 정보 Kratos ```text Identity Session ``` 예시 ```json { "identity_id":"user-123", "session_id":"session-456" } ``` --- # 7. 로그인 후 토큰 발급 흐름 (Hydra 중심) ## 목적 인증된 사용자를 SSO 사용자로 전환 다른 시스템에서도 사용할 수 있는 Token 발급 --- ## 담당 컴포넌트 ```text Hydra ``` --- ## Mermaid ```mermaid sequenceDiagram participant BE as Backend participant HYD as Hydra BE->>HYD: Token 발급 요청 HYD-->>BE: Access Token HYD-->>BE: ID Token HYD-->>BE: Refresh Token ``` --- ## 생성되는 정보 ### Access Token ```text API 접근용 ``` --- ### ID Token ```text 사용자 정보 전달 ``` --- ### Refresh Token ```text Access Token 재발급 ``` --- ## 예시 ```json { "access_token":"eyJhbGciOi...", "id_token":"eyJhbGciOi...", "refresh_token":"eyJhbGciOi..." } ``` --- # 8. 토큰 보유 상태 접근 흐름 ## 상황 ```text 이미 로그인 완료 Session 존재 또는 Access Token 존재 ``` --- ## Mermaid ```mermaid sequenceDiagram participant U as 사용자 participant GW as Gateway participant FE as Frontend participant OAT as Oathkeeper participant HYD as Hydra participant KET as Keto participant BE as Backend participant DB as PostgreSQL U->>GW: 서비스 접속 GW->>FE: 화면 제공 U->>FE: 내 정보 클릭 FE->>GW: GET /api/v1/me GW->>OAT: API 요청 전달 OAT->>HYD: 토큰 검증 HYD-->>OAT: active=true HYD-->>OAT: sub=user-123 OAT->>KET: 권한 확인 KET-->>OAT: allowed=true OAT->>BE: 인증 완료 요청 BE->>DB: 사용자 조회 DB-->>BE: 사용자 정보 BE-->>FE: 응답 반환 FE-->>U: 화면 표시 ``` --- ## 단계별 이동 데이터 Frontend → Gateway ```http GET /api/v1/me ``` 포함 ```text Session Cookie 또는 Access Token ``` --- Hydra 응답 ```json { "active": true, "sub":"user-123" } ``` --- Keto 응답 ```json { "allowed": true } ``` --- # 9. 토큰 없는 상태 접근 흐름 ## 상황 ```text 최초 접속 로그인 안됨 세션 없음 토큰 없음 ``` --- ## Mermaid ```mermaid sequenceDiagram participant U as 사용자 participant GW as Gateway participant FE as Frontend participant OAT as Oathkeeper participant BE as Backend participant KRA as Kratos participant HYD as Hydra U->>GW: 보호된 페이지 접근 GW->>FE: 페이지 요청 FE->>OAT: API 요청 OAT-->>FE: 인증 필요 FE-->>U: 로그인 페이지 이동 U->>FE: ID/PW 입력 FE->>BE: 로그인 요청 BE->>KRA: 사용자 인증 KRA-->>BE: 인증 성공 BE->>HYD: Token 발급 요청 HYD-->>BE: Access Token BE-->>FE: 로그인 성공 FE-->>U: Dashboard 이동 ``` --- # 10. OIDC 인증 흐름 ## 목적 다른 시스템이 Baron SSO를 로그인 서버로 사용 --- ## Mermaid ```mermaid sequenceDiagram participant User participant ClientApp participant Hydra participant Kratos User->>ClientApp: 서비스 접속 ClientApp->>Hydra: 인증 요청 Hydra->>Kratos: 로그인 필요 Kratos-->>User: 로그인 화면 User->>Kratos: ID/PW 입력 Kratos-->>Hydra: 인증 성공 Hydra-->>ClientApp: ID Token Hydra-->>ClientApp: Access Token ClientApp-->>User: 로그인 완료 ``` --- # 11. Ory Stack 역할 정리 ```mermaid flowchart LR User[사용자] Kratos[Kratos
인증] Hydra[Hydra
토큰] Oathkeeper[Oathkeeper
검문소] Keto[Keto
권한] Backend[Backend] User --> Kratos Kratos --> Hydra Hydra --> Oathkeeper Oathkeeper --> Keto Keto --> Backend ``` --- ## 한 줄 요약 ### Kratos ```text 누구인가? ``` ### Hydra ```text 인증 증명서 발급 ``` ### Oathkeeper ```text 토큰 확인 ``` ### Keto ```text 권한 확인 ``` ### Backend ```text 업무 처리 ``` --- # 현재 검증 상태 완료 ```text WSL 구축 Docker 구축 Ory Stack 기동 Backend 기동 Frontend 기동 로그인 성공 로그아웃 성공 재로그인 성공 회원가입 화면 진입 성공 ``` 예정 ```text 회원가입 완료 테스트 비밀번호 찾기 테스트 QR 로그인 테스트 AdminFront 테스트 DevFront 테스트 OIDC 인증 테스트 API 호출 테스트 ```