Files
transcriber/docs/adr/ADR-2026-08-12-session-without-refresh.md
T
av 7f33c957e5 вход переехал на доверенный заголовок Authelia вместо собственного OIDC
- пришедшего называет заголовок Remote-User от прокси, и верят ему только с
  адреса из перечня trusted_proxies; своего входа у сервиса не осталось — ни
  корня /auth, ни кук, ни срока сессии, ни секрета клиента в конфиге и в базе
- учётная запись заводится первым обращением: EnsureUser в пакете хранилища,
  шаг схемы 202608220001 с колонкой provider_login и снятыми правилами users
- cmd/oidcstub заменён на cmd/devtools с подкомандой proxy; заодно закрыт
  унаследованный DL3066 — пользователь образа назван числом
2026-08-22 20:24:22 +03:00

4.7 KiB
Raw Blame History

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

Решение

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

Почему

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

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

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

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

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

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

Последствия

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