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

55 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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`: первая строка периметра перестаёт быть верной.
- Панель администратора не трогается: в неё провайдер не пускает, и закрывает её
обратный прокси.