- пришедшего называет заголовок Remote-User от прокси, и верят ему только с адреса из перечня trusted_proxies; своего входа у сервиса не осталось — ни корня /auth, ни кук, ни срока сессии, ни секрета клиента в конфиге и в базе - учётная запись заводится первым обращением: EnsureUser в пакете хранилища, шаг схемы 202608220001 с колонкой provider_login и снятыми правилами users - cmd/oidcstub заменён на cmd/devtools с подкомандой proxy; заодно закрыт унаследованный DL3066 — пользователь образа назван числом
4.7 KiB
Сессия живёт семь суток и не продлевает саму себя
- Дата: 2026-08-12
- Источник: ../../openspec/changes/archive/2026-08-12-oidc-login/design.md, раздел «Что изменило ревью кода», плюс отчёт триажа ../../openspec/changes/archive/2026-08-12-oidc-login/review/report.md, пункт 6
- Статус: заменено на ADR-2026-08-22-login-by-trusted-header
Решение
Срок жизни сессии — семь суток, назначается при каждом подъёме сервиса. Продление сессии выключено: адрес, которым хранилище меняет предъявленное значение на новое, закрыт слоем приложения.
Почему
Умолчание хранилища — пять суток и продлеваемая сессия. Второе делает первое бессмысленным, и это выяснило ревью кода замером: предъявитель одного живого значения продлевает себе доступ бессрочно, никуда не входя.
Значение имеет то, на чём держится вся остановка перерасхода. Паспорт опирается на отзыв доступа в Authelia как на способ остановить того, кто тратит слишком много. Но сервис после входа к провайдеру не обращается: подпись сессии считается от значений в базе, и отзыв у провайдера до сервиса доходит только истечением срока. При живом продлении не доходит никогда — человек, которому закрыли доступ, сохраняет его навсегда.
Отвергнуто и названо ценой:
сверяться с провайдером по расписанию — новая связь с Authelia и обработка её недоступности, работа шире задачи; принять как есть — тогда паспорт теряет способ остановить того, кто тратит слишком много.
Число семь суток выбрано владельцем как компромисс: реже входить против дольше ждать, пока отзыв доедет.
Срок назначается при подъёме, а не шагом схемы, и это отдельное решение с причиной: применённый шаг не переписывается, поэтому число, положенное туда, разошлось бы со сроком жизни куки при первой же правке — браузер получил бы новый срок, а хранилище продолжило выдавать прежний.
Последствия
+отзыв доступа у провайдера доходит до сервиса гарантированно, максимум за семь суток; без этого он не доходил вовсе.+срок жизни сессии стал числом, которое кто-то выбрал, и правится он в одном месте вместе со сроком куки.−человек перевходит раз в неделю, и это заметно: своей страницы у сервиса нет, так что вход начинается с перехода по адресу входа руками.−семь суток — всё ещё окно, в которое отозванный доступ работает. Немедленно закрыть чужую сессию можно только руками в панели, обновив ключ токенов записи; своего адреса у этого нет.−закрытие продления сделано слоем приложения, а не настройкой коллекции: библиотека выдаёт сессию продлеваемой всегда, и отключить это в ней нечем. Слой придётся помнить при всякой правке маршрутов.