Мой веб-сайт - это AngularJS SPA с серверной частью Web API / SignalR, работающей на Owin. Управление аутентификацией осуществлялось с помощью веб-токена JSON (JWT), хранящегося в локальном хранилище браузера.
В соответствии с корпоративной директивой я перехожу с JWT в локальном хранилище на куки-файлы сеанса с одним сайтом только HTTP с скользящим сроком действия. Все отлично работает, кроме одной загвоздки:
Мое приложение отображает личную информацию о состоянии здоровья (PHI), поэтому я должен автоматически закрыть приложение, как только закончится сеанс. С JWT я мог бы проверить утверждение "exp", чтобы автоматически определить, что сеанс истек, и удалить PHI с экрана. Но с помощью HTTP-файла cookie я не могу получить доступ ни к какой части токена.
Когда я выдаю куки-файл, я знаю срок его действия и могу сообщить об этом браузеру. Однако, когда Оуэн обновляет cookie, браузер должен будет получить уведомление о новом истечении срока действия, и я не уверен, как это сделать.
Я мог бы сохранить второй файл cookie, который не только HTTP, содержащий только время истечения сеанса, но мне пришлось бы обновлять этот файл cookie всякий раз, когда я обновляю свой основной файл cookie авторизации.
Как сообщить браузеру, когда истекает срок сеанса, и обновлять браузер при изменении этого срока? Как я могу прикрепить обработчик событий к обновлению куки Оуэном?
Вот моя текущая конфигурация cookie:
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationMode = AuthenticationMode.Active,
CookieHttpOnly = true,
ExpireTimeSpan = TimeSpan.FromHours(2),
SlidingExpiration = true,
CookieName = "Auth"
});