forked from baron/baron-sso
- replace local auth and test-plan references with wiki URLs - delete duplicated local markdown files now covered by wiki - keep operational docs pointing to the new wiki pages
4.3 KiB
4.3 KiB
Ory Stack 사용 가이드
이 문서는 Baron SSO 로컬/도메인 환경에서 Ory Stack(Kratos/Hydra/Keto/Oathkeeper) 사용법과 내부/외부 엔드포인트 구성을 정리합니다.
1) 구성 요약
- Kratos: Identity/Session 관리(SoT)
- Hydra: OAuth2/OIDC 토큰 엔진
- Keto: 권한/정책
- Kratos UI: UserFront가 self-service UI 역할 (login/registration 등)
2) 실행 방법
# 인증 리다이렉트 설정 생성/검증
make validate-auth-config
# 인프라 + Ory Stack
docker compose -f compose.infra.yaml -f compose.ory.yaml up -d
# 앱 스택(backend/userfront/adminfront/devfront)
docker compose -f docker-compose.yaml up -d
Make 기반 실행을 사용할 경우:
make up-ory
make up-app
up-* 타깃은 내부적으로 validate-auth-config를 선행 수행하여 callback/allowed_return_urls 정합성을 먼저 검증합니다.
3) 내부 통신 vs 브라우저 접근용 URL 분리
Ory 구성은 컨테이너 내부 통신 URL과 브라우저 접근 URL을 분리해야 합니다.
내부 통신용 URL(컨테이너 네트워크)
KRATOS_PUBLIC_URL=http://kratos:4433KRATOS_ADMIN_URL=http://kratos:4434HYDRA_PUBLIC_URL=http://hydra:4444HYDRA_ADMIN_URL=http://hydra:4445
브라우저 접근용 URL(외부 도메인/프록시)
KRATOS_BROWSER_URL: Kratos Public의 외부 URLKRATOS_UI_URL: UserFront의 외부 URL (Kratos UI 역할)
예시(로컬):
KRATOS_BROWSER_URL=http://localhost:4433
KRATOS_UI_URL=http://localhost:5000
예시(리버스 프록시/도메인):
KRATOS_BROWSER_URL=https://sso.example.com
KRATOS_UI_URL=https://sso.example.com
포트 노출 정책
- Kratos/Hydra Admin 포트는 호스트에 노출하지 않음 (내부 네트워크 전용)
- MCP 서버는 동일 네트워크에서
http://kratos:4434,http://hydra:4445로 접근 - Backend는
ory-net에 연결되어 있어 Admin 포트 접근 가능 - 브라우저/Frontend는 Backend API를 통해서만 IDP 기능을 호출
4) Kratos Self-service UI 리다이렉트 설정
Kratos는 self-service UI URL을 설정값으로 사용합니다. UserFront의 브라우저 접근 URL이어야 정상 동작합니다.
KRATOS_SELFSERVICE_DEFAULT_BROWSER_RETURN_URLKRATOS_SELFSERVICE_ALLOWED_RETURN_URLSKRATOS_SELFSERVICE_FLOWS_*_UI_URL
compose에서 기본적으로 다음과 같이 오버라이드합니다:
KRATOS_SELFSERVICE_FLOWS_LOGIN_UI_URL=${KRATOS_UI_URL}/loginKRATOS_SELFSERVICE_FLOWS_REGISTRATION_UI_URL=${KRATOS_UI_URL}/registrationKRATOS_SELFSERVICE_FLOWS_SETTINGS_UI_URL=${KRATOS_UI_URL}/error?error=settings_disabled(임시 비활성)KRATOS_SELFSERVICE_FLOWS_RECOVERY_UI_URL=${KRATOS_UI_URL}/recoveryKRATOS_SELFSERVICE_FLOWS_VERIFICATION_UI_URL=${KRATOS_UI_URL}/verification
5) 트러블슈팅
5.1 로그인 클릭 시 동작 없음
- 원인: Kratos 기동 실패(설정 파싱 실패 등) 또는 브라우저용 URL이 내부 도메인(
kratos:...)으로 설정됨 - 확인:
docker logs ory_kratos에서 config 오류 여부 확인- 브라우저 네트워크 탭에서
/self-service/login/browser응답 확인(302 Location 헤더)
5.2 kratos.yml에 ${...} 환경 변수 치환 실패
- Kratos 설정 파일은
${ENV}치환을 지원하지 않음 - 해결: compose 환경 변수로
KRATOS_SELFSERVICE_*,KRATOS_SERVE_*오버라이드 사용
6) 네트워크 접근 테스트
아래 스크립트는 ory-net에서 Admin 포트 접근 가능 / baron_net(Frontend 영역)에서 접근 불가를 검증합니다.
bash test/ory-network-check.sh
직접 확인하려면:
# ory-net에서는 성공해야 함
docker run --rm --network ory-net curlimages/curl:8.10.1 -fsS http://hydra:4445/health/ready
docker run --rm --network ory-net curlimages/curl:8.10.1 -fsS http://kratos:4434/health/ready
# baron_net에서는 실패해야 함
docker run --rm --network baron_net curlimages/curl:8.10.1 -fsS http://hydra:4445/health/ready
docker run --rm --network baron_net curlimages/curl:8.10.1 -fsS http://kratos:4434/health/ready
7) 참고 파일
compose.ory.yamldocker/ory/kratos/kratos.yml.env.samplehttps://gitea.hmac.kr/baron/baron-sso/wiki/Authentication-and-Login-Flow.-