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

- **Дата:** 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
- **Статус:** заменено на [ADR-2026-08-22-login-by-trusted-header](ADR-2026-08-22-login-by-trusted-header.md)

## Решение

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

## Почему

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

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

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

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

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

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

## Последствия

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