# Кого пускать в сервис, решает правило провайдера, а не сервис

- **Дата:** 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`.
