Files
transcriber/openspec/changes/archive/2026-08-12-oidc-login/proposal.md
T
av c44f0e7582 HTTP API закрыт за вход через OIDC у Authelia
- шаг схемы закрывает поверхность, которую хранилище приносит открытой:
  собственную регистрацию, вход по паролю и одноразовый код — без этого
  закрытие приёма обходилось двумя запросами
- продление сессии выключено, срок семь суток: иначе отзыв доступа у
  провайдера до сервиса не доходит никогда
- файл записи отдаётся вошедшему по токену файла — пересмотр
  ADR-2026-08-12-file-link-open-but-not-logged
2026-08-12 17:44:22 +03:00

4.3 KiB
Raw Blame History

Why

HTTP API открыт наружу без всякой проверки: кто угодно из интернета заводит задачи расшифровки за наши деньги и читает чужие расшифровки, подобрав идентификатор задачи. Сегодняшний периметр так и записан в модели угроз — аутентификации не делает ни обратный прокси, ни само приложение.

Второго человека пригласить в сервис сейчас нельзя: это значит открыть ему всё, что в сервисе уже лежит.

What Changes

  • Сервис узнаёт, кто к нему пришёл. Учётные записи заводит и проверяет внешний провайдер — Authelia по OIDC; своей регистрации и своих паролей не заводим.
  • BREAKING Приём записи и опрос готовности задачи требуют входа: запрос без сессии получает отказ и не заводит задачу, а текста расшифровки не отдаёт. Внешняя программа, ходившая в API без всякого входа, перестаёт работать.
  • Появляются вход и выход: вход уводит человека к провайдеру и возвращает обратно уже узнанным, выход закрывает доступ немедленно.
  • Проба здоровья и метрики остаются открытыми и сессии не требуют: ни у пробы, ни у сборщика метрик её нет. Наружу их закрывает правило обратного прокси — это работа выкладки.
  • Разграничения записей по владельцу здесь нет: после входа человек видит ровно столько же, сколько видно сейчас.

Capabilities

New Capabilities

  • access: кто пришёл в сервис и пускают ли его дальше — вход через внешнего провайдера, чем предъявляется сессия, что её прекращает и какие адреса остаются открытыми.

Modified Capabilities

  • intake: приём записи и опрос готовности задачи перестают быть доступны анонимно — оба требуют узнанного отправителя.
  • storage: ссылка на файл записи перестаёт быть правом пройти по ней — файл отдаётся только узнанному отправителю.

Impact

  • Коллекция пользователей хранилища: включённый провайдер oidc с адресами Authelia, идентификатором клиента и секретом; связь учётной записи с внешним провайдером хранилище ведёт своей служебной коллекцией.
  • POST /api/audio и GET /api/status/{id} — публичный контракт HTTP API объявлен проектом необратимым, и здесь он меняется: у обоих появляется отказ без входа.
  • Новые адреса входа, возврата от провайдера и выхода.
  • Секция конфигурации под провайдера: адрес, идентификатор клиента, секрет. Секрет попадает в настройки коллекции хранилища — это новое место, где он живёт, и его надо назвать в модели угроз.
  • config.dist.toml и разбор конфига.
  • docs/security.md: первая строка периметра перестаёт быть верной.
  • Панель администратора не трогается: в неё провайдер не пускает, и закрывает её обратный прокси.