локальный вход задаётся конфигом: заголовки подставляет сам сервис

- в конфиг добавлены секция [auth.test_headers] и предохранитель [server] debug:
  заголовки входа подставляет слой транспорта, второго процесса локальный запуск
  больше не требует
- подкоманда devtools proxy удалена целиком: всё, ради чего её поднимали, делает
  сам сервис
- адресного предохранителя нет по решению владельца — цена названа в ADR и в
  модели угроз
This commit is contained in:
av
2026-08-23 13:12:47 +03:00
parent 75c6f0168a
commit 52fe31319a
35 changed files with 3548 additions and 144 deletions
+44 -14
View File
@@ -4,6 +4,20 @@ port = 8080
shutdown_timeout = 5
force_shutdown_timeout = 20
# Предохранитель отладочного запуска. Значения: false (по умолчанию) и true.
#
# Означает он одно: прогон идёт на машине разработчика, и сервису позволено
# подставить то, что в бою даёт обратный прокси, — заголовки входа из секции
# [auth.test_headers] ниже. Перечня следствий сверх этого у него нет: уровня
# журнала, текстов внутренних отказов, ограничителя частоты и подмены
# распознавателя признак не касается.
#
# Цена включения названа прямо: сервис с true и заполненной имитацией называет
# пришедшего сам, никого не спросив, и отдаёт архив всякому, чей запрос пришёл с
# доверенного адреса. В бою доверенный адрес — это адрес обратного прокси, то
# есть всякий, кто пришёл обычным путём. В боевом файле ключ стоит false.
debug = false
# Хранилище: каталог данных и числа его базы.
#
# Каталог единственный: под ним лежат и файл базы, и подкаталог с файлами
@@ -100,25 +114,41 @@ object_storage_endpoint = "https://storage.yandexcloud.net/"
# Caddy, — узкий и свой.
trusted_proxies = ["172.20.0.0/24"]
# Локальный вход без Authelia.
# Локальный вход без Authelia — рецепт целиком.
#
# Прокси на машине разработчика нет, а браузер заголовков не ставит — значит
# приложение локально не открылось бы вовсе. На место контура встаёт подставной
# прокси из оснастки: он слушает свой порт, ставит заголовок и переправляет
# запрос сервису. Проверок он не делает никаких — ни пароля, ни группы, ни
# срока, — и это его назначение, а не упущение.
# приложение локально не открылось бы вовсе. Заголовки входа подставляет сам
# сервис: второго процесса и второго порта для этого не нужно, приложение
# открывают по адресу сервиса.
#
# go run ./cmd/devtools proxy
# Три правки этого файла сверху вниз, и других не нужно:
#
# Приложение после этого открывают по адресу прокси — http://localhost:9000, —
# а не по адресу сервиса: запрос мимо прокси приходит без заголовка и никого не
# узнаёт.
# 1. Добавить в перечень выше пару петлевых адресов — обе записи, а не одну:
#
# Под него в перечне выше должен стоять петлевой адрес:
# trusted_proxies = ["172.20.0.0/24", "127.0.0.1", "::1"]
#
# trusted_proxies = ["127.0.0.1"]
# Браузер разрешает localhost в IPv6 не реже, чем в IPv4, и перечень без
# `::1` даёт неузнанный запрос. Отказ подстановки при этом виден строкой
# журнала с адресом пира — по ней и опознаётся недостающая запись.
#
# Второй вошедший получается другим значением `-user`: логин у провайдера и есть
# ключ учётной записи.
# 2. Поставить в секции [server] выше:
#
# go run ./cmd/devtools proxy -user local-2 -name "Второй"
# debug = true
#
# 3. Раскомментировать секцию ниже и назвать в ней Remote-User. Ключ —
# имя заголовка, значение — то, чем сервис назовёт пришедшего. Принимаются
# три имени: Remote-User, Remote-Name, Remote-Email; иное роняет старт.
# Ключ Remote-User обязателен: без него сервис подставит всё прочее и не
# узнает никого.
#
# Второй вошедший получается другим значением Remote-User: логин и есть ключ
# учётной записи.
#
# Заполненная секция при debug = false роняет старт с именем ключа
# предохранителя: состояние «имитация есть, предохранителя нет» не читается
# никак, а обе его прочтения — поломка.
#
# [auth.test_headers]
# Remote-User = "local"
# Remote-Name = "Разработчик"
# Remote-Email = "local@example.com"