Вход в контур без Zitadel: auth_type=original через /static/config.json

Платформа редиректила на 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 в этом списке нет.
This commit is contained in:
emelinda 2026-08-09 09:24:31 +03:00
parent 00056b9150
commit f45802c0b8

View File

@ -95,6 +95,39 @@ data:
expires off; 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/pm/ из base удалён: сервис pm контуру не нужен.
location ~^/(api|admin)/ { location ~^/(api|admin)/ {