diff --git a/[요청과업1][산출물05] Baron-SSO 아키텍쳐 리뷰.md b/[요청과업1][산출물05] Baron-SSO 아키텍쳐 리뷰.md index 07d4c90..e6a95d3 100644 --- a/[요청과업1][산출물05] Baron-SSO 아키텍쳐 리뷰.md +++ b/[요청과업1][산출물05] Baron-SSO 아키텍쳐 리뷰.md @@ -1,18 +1,423 @@ +# 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 사용자 @@ -24,31 +429,274 @@ sequenceDiagram participant BE as Backend participant DB as PostgreSQL - U->>GW: localhost:5000 접속 + U->>GW: 서비스 접속 - GW->>FE: 화면 요청 전달 - FE-->>U: 화면 표시 + GW->>FE: 화면 제공 U->>FE: 내 정보 클릭 - FE->>GW: GET /api/v1/me
Session Cookie 포함 + FE->>GW: GET /api/v1/me GW->>OAT: API 요청 전달 OAT->>HYD: 토큰 검증 - HYD-->>OAT: active=true
sub=user-123 + HYD-->>OAT: active=true + HYD-->>OAT: sub=user-123 OAT->>KET: 권한 확인 KET-->>OAT: allowed=true - OAT->>BE: 인증 완료 요청 전달 + OAT->>BE: 인증 완료 요청 BE->>DB: 사용자 조회 DB-->>BE: 사용자 정보 - BE-->>FE: 사용자 정보 반환 + BE-->>FE: 응답 반환 - FE-->>U: 내 정보 화면 표시 \ No newline at end of file + 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 호출 테스트 +```