- шаг схемы закрывает поверхность, которую хранилище приносит открытой: собственную регистрацию, вход по паролю и одноразовый код — без этого закрытие приёма обходилось двумя запросами - продление сессии выключено, срок семь суток: иначе отзыв доступа у провайдера до сервиса не доходит никогда - файл записи отдаётся вошедшему по токену файла — пересмотр ADR-2026-08-12-file-link-open-but-not-logged
3.8 KiB
Кого пускать в сервис, решает правило провайдера, а не сервис
- Дата: 2026-08-12
- Источник: ../../openspec/changes/archive/2026-08-12-oidc-login/design.md, раздел «Кого пускать, решает провайдер, а не сервис»
Решение
Сервис пускает всякого, кого пропустил провайдер, и своей проверки допуска не делает. Кто допущен, определяет правило Authelia на этого клиента — настройка выкладки, лежащая вне репозитория.
Почему
Authelia — общий провайдер контура, а не выделенный под этот сервис: учётная запись в ней есть у всякого, кому её завели ради любого другого сервиса на том же сервере. Ревью дизайна назвало следствие прямо: механизм, приглашающий «второго человека», приглашает всех, кто уже есть у провайдера.
Очевидный ответ — проверять принадлежность к названной в конфиге группе своим кодом. Владелец от него отказался: это завело бы второе место, где решается допуск, и решать его пришлось бы в двух местах согласованно.
Цена отказа названа в источнике и повторена в модели угроз:
Правило живёт вне репозитория, в настройках выкладки, и сервис на него полагается так же, как полагается на обратный прокси в части панели администратора. Настроенный слишком широко клиент открывает сервис всем, у кого есть учётная запись в общей Authelia, — и проверить это по коду нельзя.
Запись заводится как намеренный отказ от очевидного подхода: проверку группы предложат снова, и без записанной причины она выглядит бесплатной.
Последствия
+допуск решается в одном месте, а не в двух; изменение круга допущенных не требует ни правки кода, ни выкладки.+сервис не читает из ответа провайдера ничего сверх нужного для заведения записи — ни групп, ни ролей.−защита сервиса стала свойством настройки, лежащей в другом репозитории, и ревью её проверить не может: ни один проход не увидит, что клиент настроен слишком широко.−ошибка в настройке клиента не имеет наблюдаемого признака внутри сервиса: посторонний, которого пропустила Authelia, выглядит как законный пользователь.−разграничения по владельцу нет, поэтому цена ошибки в настройке — все записи и все расшифровки разом, а не одна учётная запись. Сузит этоrecord-ownership.