Синхронизация FE и BE при сбрасывании неактивной сессии

Добрых дней. Пытаемся реализовать требования по безопасности о завершении неактивной сессии (15 минут). За 30 секунд до закрытия сессии юзеру должно выдаваться предупреждение, что сессия скоро протухнет, и если юзер за 30 секунд не подтвердит, что он живой, то фронт сделает logout.

Предполагается, что фронт будет стучаться каждые 5 минут на бэк и передавать время последней активности юзера или ту или иную дельту времени(пока думаем какую). При рассмотрении возможных кейсов выяснилось, что рассинхрон по времени получается в тех случаях, когда юзер пошевелит мышкой в начале следующей пятиминутки, а затем разорвется связь - в таком случае фронт будет отсчитывать таймер от последней активности юзера, а на бэке остается устаревшее время активности, которое последний раз присылал фронт. Разница может быть в 4 минуты.

Это приводит к такому негативному кейсу - если связь восстанавливается, после того, как сессия на бэке протухает, а на фронте еще нет - выводить предупреждение пользователю бесполезно: сессию на бэке не продлить даже, если юзер подтвердит, что он живой, потому что токен уже протух, и любые запросы к BE по нему вернут 401.

Есть ощущение, что решение где-то рядом, блуждаем в 3 соснах. Подскажите, может кто с этим встречался в своей практике? В сети что-то ничего толкового не могу найти.


Ответы (0 шт):