- пришедшего называет заголовок Remote-User от прокси, и верят ему только с адреса из перечня trusted_proxies; своего входа у сервиса не осталось — ни корня /auth, ни кук, ни срока сессии, ни секрета клиента в конфиге и в базе - учётная запись заводится первым обращением: EnsureUser в пакете хранилища, шаг схемы 202608220001 с колонкой provider_login и снятыми правилами users - cmd/oidcstub заменён на cmd/devtools с подкомандой proxy; заодно закрыт унаследованный DL3066 — пользователь образа назван числом
6.4 KiB
6.4 KiB
Why
Сервис ведёт вход своими руками: уводит человека к провайдеру, помнит выданное состояние у браузера, меняет принесённый код на сессию и потом семь суток верит выданной куке, ни разу больше не спросив провайдера. Отзыв доступа доходит до сервиса только истечением этой куки — то есть с задержкой до недели, — а секрет клиента ради обмена лежит и в конфиге, и в базе.
Обратный прокси между интернетом и сервисом уже спрашивает Authelia на каждом запросе и называет пришедшего заголовком: трём соседним сервисам того же контура он так и служит. Сервису достаточно этот заголовок прочитать, и весь собственный протокол входа становится лишним.
What Changes
- BREAKING Кто пришёл, сервис узнаёт из заголовка, поставленного обратным прокси. Своего входа у него не остаётся вовсе: ни адреса, уводящего к провайдеру, ни возврата, ни куки, ни выхода.
- BREAKING Заголовку верят только с адреса, объявленного доверенным. Пришедший с любого другого адреса тем же заголовком не узнаётся никак.
- Учётная запись заводится сама, при первом обращении с новым именем, и находится по нему же при каждом следующем. Имя из заголовка становится ключом учётной записи и живёт своей колонкой.
- BREAKING Секция настроек входа переписывается целиком: адреса провайдера, идентификатор и секрет клиента уходят, приходит перечень доверенных адресов.
- Секрет клиента исчезает и из настроек хранилища. Вместе с ним снимается изъятие из инварианта «Секрет не покидает конфиг»: чтение файла базы больше не равносильно чтению секрета.
- Отзыв доступа перестаёт ждать семи суток: Authelia судит каждый запрос, а сервис назначенного срока сессии больше не держит вовсе.
- Панель владельца закрывается доменом, а не правилом на литерал пути, и обход подменой знака в адресе перестаёт существовать. Половина этой работы живёт в контуре выкладки, вне репозитория.
- Способ представиться на машине без прокси заводится заново: подставной провайдер уходит вместе с протоколом.
Capabilities
New Capabilities
Новых нет: работа меняет то, как узнаётся пришедший, а не заводит новое поведение.
Modified Capabilities
access: узнавание пришедшего переезжает с собственного входа у внешнего провайдера на заголовок доверенного источника. Уходят требования о протоколе входа, о куке сессии, о сроке её жизни, о выходе, о продлении и о секрете провайдера в конфиге; приходят требования о доверенном источнике, о заголовке как имени пришедшего и о заведении учётной записи первым обращением. Требования о владельце записи, об открытых адресах и о том, как приложение узнаёт вошедшего, остаются по существу и правятся в формулировках.
Impact
- Транспорт HTTP: обработчики входа и возврата, слой предъявления куки, слой
запрета продления, корень
/authцеликом. - Хранилище: приведение настроек провайдера к конфигу при подъёме, новый шаг
схемы — колонка имени из заголовка, снятие настроек OAuth2 и правила создания
записи. Применённый шаг
202608120001_oidc_loginне переписывается. - Настройки: секция входа в конфиге и в его образце. Имена ключей — необратимое, и решение по ним принимает человек.
- Приложение: адрес, которым экран уводил ко входу.
- Инструменты: подставной провайдер OIDC уходит, на его место встаёт способ
представиться без прокси. На него опирается задача
dev-run-task. - Документы: модель угроз — периметр, недоверенный вход, разграничение доступа,
сдвиг про секрет в базе;
CLAUDE.md— изъятие из инварианта о секрете; устройство и схема хранилища. - Вне репозитория: правило обратного прокси и правило Authelia для домена
сервиса живут в
pet-project-server. Этой работой они не проверяются, но требование к ним она обязана назвать.