forked from baron/baron-sso
ory스택 버전업 및 하드코딩URL 제거
This commit is contained in:
@@ -33,12 +33,14 @@ Ory 구성은 **컨테이너 내부 통신 URL**과 **브라우저 접근 URL**
|
||||
### 내부 통신용 URL(컨테이너 네트워크)
|
||||
- `KRATOS_PUBLIC_URL=http://kratos:4433`
|
||||
- `KRATOS_ADMIN_URL=http://kratos:4434`
|
||||
- `HYDRA_PUBLIC_URL=http://hydra:4444`
|
||||
- `HYDRA_ADMIN_URL=http://hydra:4445`
|
||||
- Hydra public upstream은 Oathkeeper rule 내부에서 `http://hydra:4444`로 전달합니다.
|
||||
|
||||
### 브라우저 접근용 URL(외부 도메인/프록시)
|
||||
- `KRATOS_BROWSER_URL` : Kratos Public의 외부 URL
|
||||
- `KRATOS_BROWSER_URL` : Kratos Public의 외부 URL. 보통 `${OATHKEEPER_PUBLIC_URL}/auth`
|
||||
- `KRATOS_UI_URL` : UserFront의 외부 URL (Kratos UI 역할)
|
||||
- `HYDRA_PUBLIC_URL` : Hydra issuer/OIDC discovery의 외부 URL. 보통 `${OATHKEEPER_PUBLIC_URL}/oidc`
|
||||
- `VITE_OIDC_AUTHORITY` : 프론트엔드 OIDC authority. `HYDRA_PUBLIC_URL`과 같아야 합니다.
|
||||
|
||||
예시(로컬):
|
||||
```env
|
||||
@@ -48,8 +50,11 @@ KRATOS_UI_URL=http://localhost:5000
|
||||
|
||||
예시(리버스 프록시/도메인):
|
||||
```env
|
||||
KRATOS_BROWSER_URL=https://sso.example.com
|
||||
OATHKEEPER_PUBLIC_URL=https://sso.example.com
|
||||
KRATOS_BROWSER_URL=https://sso.example.com/auth
|
||||
KRATOS_UI_URL=https://sso.example.com
|
||||
HYDRA_PUBLIC_URL=https://sso.example.com/oidc
|
||||
VITE_OIDC_AUTHORITY=https://sso.example.com/oidc
|
||||
```
|
||||
|
||||
### 포트 노출 정책
|
||||
@@ -64,6 +69,7 @@ Kratos는 self-service UI URL을 설정값으로 사용합니다. **UserFront의
|
||||
- `KRATOS_SELFSERVICE_DEFAULT_BROWSER_RETURN_URL`
|
||||
- `KRATOS_SELFSERVICE_ALLOWED_RETURN_URLS`
|
||||
- `KRATOS_SELFSERVICE_FLOWS_*_UI_URL`
|
||||
- `KRATOS_ALLOWED_RETURN_URLS_JSON`
|
||||
|
||||
compose에서 기본적으로 다음과 같이 오버라이드합니다:
|
||||
- `KRATOS_SELFSERVICE_FLOWS_LOGIN_UI_URL=${KRATOS_UI_URL}/login`
|
||||
@@ -72,18 +78,44 @@ compose에서 기본적으로 다음과 같이 오버라이드합니다:
|
||||
- `KRATOS_SELFSERVICE_FLOWS_RECOVERY_UI_URL=${KRATOS_UI_URL}/recovery`
|
||||
- `KRATOS_SELFSERVICE_FLOWS_VERIFICATION_UI_URL=${KRATOS_UI_URL}/verification`
|
||||
|
||||
## 5) 트러블슈팅
|
||||
### 5.1 로그인 클릭 시 동작 없음
|
||||
stage/prod에서는 `KRATOS_ALLOWED_RETURN_URLS_JSON`에 공개 도메인과 callback/locale 경로를 명시합니다.
|
||||
|
||||
필수 후보:
|
||||
- `${KRATOS_UI_URL}`, `${KRATOS_UI_URL}/`
|
||||
- `${USERFRONT_URL}`, `${USERFRONT_URL}/`
|
||||
- `${USERFRONT_URL}/ko`, `${USERFRONT_URL}/ko/`
|
||||
- `${USERFRONT_URL}/en`, `${USERFRONT_URL}/en/`
|
||||
- `${USERFRONT_URL}/auth/callback`
|
||||
- `${USERFRONT_URL}/ko/auth/callback`
|
||||
- `${USERFRONT_URL}/en/auth/callback`
|
||||
- `${ADMINFRONT_CALLBACK_URLS}`, `${DEVFRONT_CALLBACK_URLS}`, `${ORGFRONT_CALLBACK_URLS}`
|
||||
|
||||
## 5) `/oidc` Gateway/Oathkeeper 책임 경계
|
||||
Gateway는 `/oidc` prefix를 rewrite하지 않습니다. `/oidc/*` 요청은 prefix를 보존한 채 Oathkeeper로 전달하고, Oathkeeper rule이 `strip_path=/oidc`로 Hydra 내부 upstream(`http://hydra:4444`)에 전달합니다.
|
||||
|
||||
이 정책은 `gateway/nginx.conf`, `deploy/templates/gateway/nginx.conf`, `docker/ory/oathkeeper/rules*.json`, `docker/staging_pull_compose.template.yaml`에서 동일해야 합니다.
|
||||
|
||||
## 6) Oathkeeper active rules
|
||||
Oathkeeper는 `/etc/config/oathkeeper/entrypoint.sh`를 통해 시작해야 합니다. entrypoint는 `APP_ENV`에 따라 env별 rules 파일을 고르고 `/tmp/oathkeeper/rules.active.json`을 생성합니다.
|
||||
|
||||
- `APP_ENV=stage|staging`: `rules.stage.json`
|
||||
- `APP_ENV=production|prod`: `rules.prod.json`
|
||||
- 그 외: `rules.json`
|
||||
|
||||
`docker/ory/oathkeeper/oathkeeper.yml`은 `file:///tmp/oathkeeper/rules.active.json`을 읽습니다. compose나 배포 템플릿이 entrypoint를 우회해 `oathkeeper serve proxy`를 직접 실행하면 active rules 생성이 누락될 수 있습니다.
|
||||
|
||||
## 7) 트러블슈팅
|
||||
### 7.1 로그인 클릭 시 동작 없음
|
||||
- 원인: Kratos 기동 실패(설정 파싱 실패 등) 또는 브라우저용 URL이 내부 도메인(`kratos:...`)으로 설정됨
|
||||
- 확인:
|
||||
- `docker logs ory_kratos`에서 config 오류 여부 확인
|
||||
- 브라우저 네트워크 탭에서 `/self-service/login/browser` 응답 확인(302 Location 헤더)
|
||||
|
||||
### 5.2 kratos.yml에 ${...} 환경 변수 치환 실패
|
||||
### 7.2 kratos.yml에 ${...} 환경 변수 치환 실패
|
||||
- Kratos 설정 파일은 `${ENV}` 치환을 지원하지 않음
|
||||
- 해결: compose 환경 변수로 `KRATOS_SELFSERVICE_*`, `KRATOS_SERVE_*` 오버라이드 사용
|
||||
|
||||
## 6) 네트워크 접근 테스트
|
||||
## 8) 네트워크 접근 테스트
|
||||
아래 스크립트는 **ory-net에서 Admin 포트 접근 가능** / **baron_net(Frontend 영역)에서 접근 불가**를 검증합니다.
|
||||
|
||||
```bash
|
||||
@@ -101,7 +133,7 @@ docker run --rm --network baron_net curlimages/curl:8.10.1 -fsS http://hydra:444
|
||||
docker run --rm --network baron_net curlimages/curl:8.10.1 -fsS http://kratos:4434/health/ready
|
||||
```
|
||||
|
||||
## 7) 참고 파일
|
||||
## 9) 참고 파일
|
||||
- `compose.ory.yaml`
|
||||
- `docker/ory/kratos/kratos.yml`
|
||||
- `.env.sample`
|
||||
|
||||
Reference in New Issue
Block a user