- шаг схемы закрывает поверхность, которую хранилище приносит открытой: собственную регистрацию, вход по паролю и одноразовый код — без этого закрытие приёма обходилось двумя запросами - продление сессии выключено, срок семь суток: иначе отзыв доступа у провайдера до сервиса не доходит никогда - файл записи отдаётся вошедшему по токену файла — пересмотр ADR-2026-08-12-file-link-open-but-not-logged
55 lines
4.3 KiB
Markdown
55 lines
4.3 KiB
Markdown
## 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`: первая строка периметра перестаёт быть верной.
|
||
- Панель администратора не трогается: в неё провайдер не пускает, и закрывает её
|
||
обратный прокси.
|