From f45802c0b8e1b3ef25ba9aca66ef609e8661e248 Mon Sep 17 00:00:00 2001 From: emelinda Date: Sun, 9 Aug 2026 09:24:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=85=D0=BE=D0=B4=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D1=83=D1=80=20=D0=B1=D0=B5=D0=B7=20Zitadel:?= =?UTF-8?q?=20auth=5Ftype=3Doriginal=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20/s?= =?UTF-8?q?tatic/config.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Платформа редиректила на zitadel.contour.infra.sarex.tech — чужой контур, из aero недостижимый, — и падала с invalid_request: The requested redirect_uri is missing in the client configuration то есть войти было нельзя вообще. Zitadel во фронтенде выключается штатно и в рантайме. На старте он делает fetch("/static/config.json") и, если там есть auth_type, БЕЗУСЛОВНО перекрывает им режим, зашитый в сборку (src/Model/api/http-service.ts в generic/sarex-frontend). Значений два: zitadel и original; original — классический вход по логину и паролю с JWT, ради которого backend и получает из Vault ключи RS512, а SERVER_ZITADEL_ENABLED в оверлее уже стоит в False. Файл отдаётся прямо из nginx, а не подкладывается томом: static/config.json в sarex-frontend лежит в .gitignore и заполняется на каждом стенде своим — это штатная точка расширения. В апстримном nginx.conf под него заведён такой же location = с no-store, только читающий с диска. Через localStorage подменить нельзя: оверрайд оттуда действует лишь для endpoint'ов stage, preprod и local, contour в этом списке нет. --- apps/django/aero/nginx-configmap.yaml | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/apps/django/aero/nginx-configmap.yaml b/apps/django/aero/nginx-configmap.yaml index 89243bb..a4122ce 100644 --- a/apps/django/aero/nginx-configmap.yaml +++ b/apps/django/aero/nginx-configmap.yaml @@ -95,6 +95,39 @@ data: expires off; } + # Выбор способа аутентификации. Фронтенд на старте делает + # fetch("/static/config.json") и, если там есть auth_type, + # БЕЗУСЛОВНО перекрывает им режим, зашитый в сборку + # (src/Model/api/http-service.ts). Значения ровно два: + # "zitadel" и "original"; original — классический вход по + # логину и паролю с JWT, ради которого backend и получает из + # Vault ключи RS512. + # + # В образе sarex-frontend-dev:contour_* этот файл лежит со + # значением zitadel и хостом zitadel.contour.infra.sarex.tech — + # чужой контур, из aero недоступен. Из-за него платформа + # редиректила на /oauth/v2/authorize и получала + # invalid_request: The requested redirect_uri is missing + # in the client configuration + # то есть войти было нельзя в принципе. + # + # Отдаём файл прямо из nginx, не подкладывая том: сам + # static/config.json в sarex-frontend лежит в .gitignore и + # заполняется на каждом стенде своим — это штатная точка + # расширения, а не обход. В апстримном nginx.conf под него уже + # заведён такой же location =, только читающий с диска. + # + # Подменить через localStorage нельзя: оверрайд оттуда + # действует лишь для endpoint'ов stage, preprod и local, + # contour в этом списке нет. + location = /static/config.json { + default_type application/json; + add_header Cache-Control 'no-store no-cache, must-revalidate, proxy-revalidate, max-age=0'; + if_modified_since off; + expires off; + return 200 '{"auth_type":"original"}'; + } + # location /api/pm/ из base удалён: сервис pm контуру не нужен. location ~^/(api|admin)/ {