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