forked from baron/baron-sso
85 lines
3.2 KiB
Markdown
85 lines
3.2 KiB
Markdown
# Ory Stack 상세 가이드 (Baron SSO)
|
|
|
|
이 문서는 Baron SSO의 핵심 엔진인 Ory Stack의 구성 요소와 전체적인 인증/인가 플로우를 설명합니다.
|
|
|
|
## 1. 구성 요소별 상세 역할
|
|
|
|
|
|
| 구성 요소 | 별칭 | 주요 역할 | 핵심 기능 |
|
|
| :------------- | :------------ | :--------------- | :-------------------------------------------- |
|
|
| **Kratos** | Identity | **사용자 관리** | 회원가입, 로그인, MFA, 프로필 수정, 계정 복구 |
|
|
| | | | |
|
|
| **Hydra** | OAuth2/OIDC | **연동 및 토큰** | Access/ID 토큰 발급, 외부 서비스 SSO 연동 |
|
|
| **Keto** | Authorization | **권한 제어** | RBAC, ACL, "누가 무엇을 할 수 있는가" 판별 |
|
|
| **Oathkeeper** | Proxy/Gateway | **접근 통제** | 요청 검증, 세션 확인, 헤더 변환, API 보호 |
|
|
|
|
---
|
|
|
|
## 2. 시스템 플로우 (System Flow)
|
|
|
|
사용자가 보호된 백엔드 리소스에 접근할 때의 일반적인 흐름입니다.
|
|
|
|
### [인증 및 접근 흐름]
|
|
|
|
1. **Request**: 사용자가 API 요청을 보냄 (예: `GET /api/data`).
|
|
2. **Intercept (Oathkeeper)**: Oathkeeper가 요청을 가로챔.
|
|
3. **Authenticate (Kratos)**: Oathkeeper가 Kratos에게 사용자의 세션 쿠키가 유효한지 확인.
|
|
4. **Authorize (Keto)**: Oathkeeper가 Keto에게 해당 사용자가 `/api/data`를 볼 권한이 있는지 확인.
|
|
5. **Transform**: 모든 검증이 끝나면 Oathkeeper가 사용자 정보를 헤더(예: `X-User-ID`)에 담아 백엔드로 전달.
|
|
6. **Response**: 백엔드가 로직을 수행하고 결과를 반환.
|
|
|
|
### [SSO 연동 흐름 (OIDC)]
|
|
|
|
1. **Discovery**: 외부 서비스(App A)가 로그인 필요 시 Hydra로 인증 요청을 보냄.
|
|
2. **Login Challenge**: Hydra가 로그인 UI(`userfront`)로 리다이렉트하며 챌린지를 보냄.
|
|
3. **Auth (Kratos)**: 사용자가 `userfront`에서 로그인(Kratos 사용).
|
|
4. **Accept**: `userfront`가 로그인 성공 시 Hydra에게 챌린지 수락을 알림.
|
|
5. **Token Issuance**: Hydra가 App A에게 Auth Code를 주고, App A는 이를 Access/ID Token으로 교환.
|
|
|
|
---
|
|
|
|
## 3. 아키텍처 다이어그램
|
|
|
|
```mermaid
|
|
graph TD
|
|
User((사용자))
|
|
|
|
subgraph "Edge / Gateway"
|
|
OK[Ory Oathkeeper]
|
|
end
|
|
|
|
subgraph "Identity & Access Layer"
|
|
KR[Ory Kratos]
|
|
HY[Ory Hydra]
|
|
KE[Ory Keto]
|
|
end
|
|
|
|
subgraph "Application Layer"
|
|
BE[Backend API]
|
|
AF[Admin Front]
|
|
UF[User Front]
|
|
end
|
|
|
|
User -->|API Request| OK
|
|
User -->|Login/Register| UF
|
|
UF --> KR
|
|
|
|
OK -->|1. 세션 확인| KR
|
|
OK -->|2. 권한 확인| KE
|
|
OK -->|3. 요청 전달| BE
|
|
|
|
AF -->|관리 작업| BE
|
|
BE -->|Admin API 호출| KR & HY & KE
|
|
|
|
HY -->|SSO 토큰 발급| User
|
|
```
|
|
|
|
---
|
|
|
|
## 4. 요약
|
|
|
|
- **Kratos**는 사용자의 정보를 알고 있습니다.
|
|
- **Keto**는 사용자의 권한을 알고 있습니다.
|
|
- **Hydra**는 사용자를 외부 서비스에 증명합니다.
|
|
- **Oathkeeper**는 위 서비스들을 이용해 입구를 지킵니다.
|