HTTP API закрыт за вход через OIDC у Authelia
- шаг схемы закрывает поверхность, которую хранилище приносит открытой: собственную регистрацию, вход по паролю и одноразовый код — без этого закрытие приёма обходилось двумя запросами - продление сессии выключено, срок семь суток: иначе отзыв доступа у провайдера до сервиса не доходит никогда - файл записи отдаётся вошедшему по токену файла — пересмотр ADR-2026-08-12-file-link-open-but-not-logged
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# Кого пускать в сервис, решает правило провайдера, а не сервис
|
||||
|
||||
- **Дата:** 2026-08-12
|
||||
- **Источник:** [../../openspec/changes/archive/2026-08-12-oidc-login/design.md](../../openspec/changes/archive/2026-08-12-oidc-login/design.md),
|
||||
раздел «Кого пускать, решает провайдер, а не сервис»
|
||||
|
||||
## Решение
|
||||
|
||||
Сервис пускает всякого, кого пропустил провайдер, и **своей проверки допуска не
|
||||
делает**. Кто допущен, определяет правило Authelia на этого клиента — настройка
|
||||
выкладки, лежащая вне репозитория.
|
||||
|
||||
## Почему
|
||||
|
||||
Authelia — общий провайдер контура, а не выделенный под этот сервис: учётная
|
||||
запись в ней есть у всякого, кому её завели ради любого другого сервиса на том же
|
||||
сервере. Ревью дизайна назвало следствие прямо: механизм, приглашающий «второго
|
||||
человека», приглашает всех, кто уже есть у провайдера.
|
||||
|
||||
Очевидный ответ — проверять принадлежность к названной в конфиге группе своим
|
||||
кодом. Владелец от него отказался: это завело бы **второе место**, где решается
|
||||
допуск, и решать его пришлось бы в двух местах согласованно.
|
||||
|
||||
Цена отказа названа в источнике и повторена в модели угроз:
|
||||
|
||||
> Правило живёт вне репозитория, в настройках выкладки, и сервис на него
|
||||
> полагается так же, как полагается на обратный прокси в части панели
|
||||
> администратора. Настроенный слишком широко клиент открывает сервис всем, у кого
|
||||
> есть учётная запись в общей Authelia, — и проверить это по коду нельзя.
|
||||
|
||||
Запись заводится как **намеренный отказ от очевидного подхода**: проверку группы
|
||||
предложат снова, и без записанной причины она выглядит бесплатной.
|
||||
|
||||
## Последствия
|
||||
|
||||
- `+` допуск решается в одном месте, а не в двух; изменение круга допущенных не
|
||||
требует ни правки кода, ни выкладки.
|
||||
- `+` сервис не читает из ответа провайдера ничего сверх нужного для заведения
|
||||
записи — ни групп, ни ролей.
|
||||
- `−` защита сервиса стала свойством настройки, лежащей в другом репозитории, и
|
||||
ревью её проверить не может: ни один проход не увидит, что клиент настроен
|
||||
слишком широко.
|
||||
- `−` ошибка в настройке клиента не имеет наблюдаемого признака внутри сервиса:
|
||||
посторонний, которого пропустила Authelia, выглядит как законный пользователь.
|
||||
- `−` разграничения по владельцу нет, поэтому цена ошибки в настройке — все
|
||||
записи и все расшифровки разом, а не одна учётная запись. Сузит это
|
||||
`record-ownership`.
|
||||
Reference in New Issue
Block a user