Files
transcriber/docs/adr/ADR-2026-08-12-session-without-refresh.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.5 KiB
Raw Blame History

Сессия живёт семь суток и не продлевает саму себя

Решение

Срок жизни сессии — семь суток, назначается при каждом подъёме сервиса. Продление сессии выключено: адрес, которым хранилище меняет предъявленное значение на новое, закрыт слоем приложения.

Почему

Умолчание хранилища — пять суток и продлеваемая сессия. Второе делает первое бессмысленным, и это выяснило ревью кода замером: предъявитель одного живого значения продлевает себе доступ бессрочно, никуда не входя.

Значение имеет то, на чём держится вся остановка перерасхода. Паспорт опирается на отзыв доступа в Authelia как на способ остановить того, кто тратит слишком много. Но сервис после входа к провайдеру не обращается: подпись сессии считается от значений в базе, и отзыв у провайдера до сервиса доходит только истечением срока. При живом продлении не доходит никогда — человек, которому закрыли доступ, сохраняет его навсегда.

Отвергнуто и названо ценой:

сверяться с провайдером по расписанию — новая связь с Authelia и обработка её недоступности, работа шире задачи; принять как есть — тогда паспорт теряет способ остановить того, кто тратит слишком много.

Число семь суток выбрано владельцем как компромисс: реже входить против дольше ждать, пока отзыв доедет.

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

Последствия

  • + отзыв доступа у провайдера доходит до сервиса гарантированно, максимум за семь суток; без этого он не доходил вовсе.
  • + срок жизни сессии стал числом, которое кто-то выбрал, и правится он в одном месте вместе со сроком куки.
  • человек перевходит раз в неделю, и это заметно: своей страницы у сервиса нет, так что вход начинается с перехода по адресу входа руками.
  • семь суток — всё ещё окно, в которое отозванный доступ работает. Немедленно закрыть чужую сессию можно только руками в панели, обновив ключ токенов записи; своего адреса у этого нет.
  • закрытие продления сделано слоем приложения, а не настройкой коллекции: библиотека выдаёт сессию продлеваемой всегда, и отключить это в ней нечем. Слой придётся помнить при всякой правке маршрутов.