From e2ecbaf8a586ae4068fd3f4ba92e6bffaad609ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Wed, 18 Mar 2026 14:16:20 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[middleware]=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=82=B0=EC=B6=9C=20API=EC=97=90=20Bearer=20=EC=97=86=EC=9D=B4?= =?UTF-8?q?=20API=20Key=20+=20X-TENANT-ID=20=EC=A0=91=EA=B7=BC=20=ED=97=88?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - quotes/calculate/* 를 allowWithoutAuth 화이트리스트에 추가 - X-TENANT-ID 헤더로 tenant 컨텍스트 설정 (Bearer 토큰 없어도 동작) - MNG 품목관리 수식 산출에서 HTTP 401 오류 해결 --- app/Http/Middleware/ApiKeyMiddleware.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app/Http/Middleware/ApiKeyMiddleware.php b/app/Http/Middleware/ApiKeyMiddleware.php index 2c3db683..38b304db 100644 --- a/app/Http/Middleware/ApiKeyMiddleware.php +++ b/app/Http/Middleware/ApiKeyMiddleware.php @@ -115,13 +115,19 @@ public function handle(Request $request, Closure $next) } } - // MNG 내부 통신: X-TENANT-ID 헤더로 테넌트 컨텍스트 재설정 - // mng_session 토큰(InternalTokenService 발급)인 경우에만 허용 + // MNG 내부 통신: X-TENANT-ID 헤더로 테넌트 컨텍스트 설정 $headerTenantId = $request->header('X-TENANT-ID'); - if ($headerTenantId && $accessToken && $accessToken->name === 'mng_session') { - $overrideTenantId = (int) $headerTenantId; - $request->attributes->set('tenant_id', $overrideTenantId); - app()->instance('tenant_id', $overrideTenantId); + if ($headerTenantId && $validApiKey) { + if ($accessToken && $accessToken->name === 'mng_session') { + // Bearer 토큰(mng_session)이 있으면 테넌트 컨텍스트 재설정 + $overrideTenantId = (int) $headerTenantId; + $request->attributes->set('tenant_id', $overrideTenantId); + app()->instance('tenant_id', $overrideTenantId); + } elseif (! app()->bound('tenant_id')) { + // Bearer 토큰 없이 API Key + X-TENANT-ID만 있으면 tenant 컨텍스트만 설정 + $request->attributes->set('tenant_id', (int) $headerTenantId); + app()->instance('tenant_id', (int) $headerTenantId); + } } // 화이트리스트(인증 예외 라우트) - Bearer 토큰 없이 접근 가능 @@ -142,6 +148,7 @@ public function handle(Request $request, Closure $next) 'api/v1/items/*/files', // 품목 파일 업로드/조회 'api/v1/files/*/view', // 파일 인라인 보기 (MNG 이미지 표시) 'api/v1/files/*/download', // 파일 다운로드 + 'api/v1/quotes/calculate/*', // 자동산출 (MNG에서 API Key + X-TENANT-ID로 접근) ]; // 현재 라우트 확인 (경로 또는 이름)