diff --git a/.env.example b/.env.example index fe53503..3f6d680 100644 --- a/.env.example +++ b/.env.example @@ -54,6 +54,13 @@ SESSION_NAME_KEY=user_name MAIN_LOGIN_URL=https://dbx.no1king.freeddns.org/login MAIN_LOGOUT_URL=https://dbx.no1king.freeddns.org/logout +# ===== 서비스 간 호출 인증 ===== +# OMS 가 반품 신청을 보낼 때 X-Service-Token 헤더로 이 값을 보낸다. +# CORM 의 AuthGuard 가 해당 헤더가 이 값과 일치하면 세션 검사 우회. +# OMS 의 .env 와 동일한 값으로 박을 것. +# NPM 은 외부에서 들어온 이 헤더를 strip 해야 한다 (보안). +INTERNAL_SERVICE_TOKEN=__paste-same-value-as-dbx-orderlist__ + # ============================================ # Docker network # ============================================ diff --git a/main.py b/main.py index 1fb269f..6cfc428 100644 --- a/main.py +++ b/main.py @@ -85,6 +85,14 @@ class AuthGuardMiddleware(BaseHTTPMiddleware): if path == prefix or path.startswith(prefix): return await call_next(request) + # 서비스 간 호출 — X-Service-Token 헤더가 일치하면 세션 없이도 통과. + # NPM 은 외부에서 들어온 이 헤더를 빈 값으로 strip 해야 한다 (보안). + service_token = os.getenv("INTERNAL_SERVICE_TOKEN", "") + if service_token: + incoming_token = request.headers.get("x-service-token", "") + if incoming_token and incoming_token == service_token: + return await call_next(request) + email = request.session.get(SESSION_USER_KEY) if email: return await call_next(request)