From 88d7b1ba7aa656e50e1da5c92691ca04dbd3770b Mon Sep 17 00:00:00 2001 From: king Date: Sun, 24 May 2026 13:25:38 +0900 Subject: [PATCH] =?UTF-8?q?feat(sso):=20SESSION=5FSECRET=5FKEY=20=EB=AF=B8?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=8B=9C=20fail-fast?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SESSION_SECRET_KEY 가 .env 에 없으면 컨테이너 기동 단계에서 RuntimeError. 알려진 기본값(super-secret-key) 폴백 제거로 양쪽 secret 불일치 사고 방지. - .env.example 의 SESSION_SECRET_KEY 안내 강화 (openssl 명령, dbx-main 동기화 언급). --- .env.example | 4 +++- app/main.py | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 6716d3d..8bf8646 100644 --- a/.env.example +++ b/.env.example @@ -18,7 +18,9 @@ APP_ROOT_PATH=/orderlist # ===== SSO (dbx-main 세션 공유) ===== # dbx-main 과 OMS 가 반드시 같은 값으로 맞춰야 SSO가 동작한다. -# - SESSION_SECRET_KEY : 두 앱이 동일해야 세션 쿠키를 서로 복호화 가능 +# - SESSION_SECRET_KEY : 두 앱이 동일해야 세션 쿠키를 서로 복호화 가능. +# 미설정 시 컨테이너 기동 실패(fail-fast). +# openssl rand -hex 32 로 생성한 같은 값을 dbx-main .env 에도 박을 것. # - SESSION_COOKIE_NAME : 두 앱이 동일해야 같은 쿠키를 본다 (기본 'session') SESSION_SECRET_KEY=__paste-same-value-as-dbx-main__ SESSION_COOKIE_NAME=session diff --git a/app/main.py b/app/main.py index 577c491..4284239 100644 --- a/app/main.py +++ b/app/main.py @@ -35,9 +35,16 @@ async def health_db(): # dbx-main 과 SSO 하려면 SESSION_SECRET_KEY 와 SESSION_COOKIE_NAME 을 # 두 앱이 동일하게 맞춰야 한다. 그래야 dbx-main 이 발급한 세션 쿠키를 # OMS 가 그대로 읽을 수 있다. +_session_secret = os.getenv("SESSION_SECRET_KEY", "").strip() +if not _session_secret: + raise RuntimeError( + "SESSION_SECRET_KEY 환경변수가 설정되지 않았습니다. " + "openssl rand -hex 32 로 새 값을 만들어 .env 에 넣고 컨테이너를 재기동하세요. " + "dbx-main 과 SSO 하려면 양쪽 .env 에 같은 값이어야 합니다." + ) app.add_middleware( SessionMiddleware, - secret_key=os.getenv("SESSION_SECRET_KEY", "super-secret-key"), + secret_key=_session_secret, session_cookie=os.getenv("SESSION_COOKIE_NAME", "session"), same_site=os.getenv("SESSION_SAME_SITE", "lax"), https_only=os.getenv("SESSION_HTTPS_ONLY", "0") == "1",