Файл cookie сессии истечения срока действия Asp.net
Мы используем MVC 5.2 иASP.NET Identity структура для проверки подлинности с экраном проверки подлинности формы (комбинация пользователя и пароля) и идентификация сохраняется с помощью cookie. У меня есть конфигурация в моем методе запуска для платформы Identity, чтобы установить истечение срока действия файла cookie аутентификации на 30 дней, это прекрасно работает, когда пользователь выбирает «запомнить меня» (IsPersistent = true). Когда IsPersistent = false (пользователь решает не выбирать «Запомнить меня»), файл cookie сеанса создается по умолчанию. Этот файл cookie сеанса отлично работает в Internet Explorer, а также в FireFox, когда браузер закрыт, файл cookie теряется. В Chrome и Safari (а также, возможно, и в других браузерах) есть опции, гарантирующие, что сеансовые куки не будут потеряны, в этом случае пользователь остается в системе даже после закрытия и повторного открытия браузера.
Я хотел бы обойти эту проблему, чтобы гарантировать, что сеансовые куки не сохраняются вечно, а удаляются в течение часа. Я мог бы понять это, проверив, не активна ли учетная запись в течение X минут / часов, и пользователь никогда не выбирал «Запомнить меня», тогда личность пользователя «отклоняется» при следующем запросе, если этот промежуток времени истекает.
Кто-нибудь создал обходной путь в своей реализации ASP.NET Identity, чтобы гарантировать, что сеансовые куки-файлы истекли во внутреннем интерфейсе после X времени, или, может быть, есть лучший способ обойти это ограничение? Может быть, это можно сделать с помощью пользовательской реализации CookieAuthenticationProvider или передать дату / время истечения срока заявлению пользователя, которое можно проверить где-нибудь в процессе ValidateIdentity?
Любые идеи будут великолепны. Заранее спасибо, Игорь
Редактировать - больше информации: моя реализация аутентификации имеет 2 основных «режима» (в данный момент не могу придумать лучшего слова). Моя реализация для простой формы имени пользователя / пароля с флажком «запомнить меня». Значение флажка передается свойству IsPersistent объекта AuthenticationProperties, которое передается методу AuthenticationManager :: SignIn.
Пользователь хочет «запомнить меня», который создает долгоживущий файл cookie со сроком действия 30 дней, установленным с использованием скользящего срока действия. Это позволяет пользователю оставаться аутентифицированным между сеансами браузера, и из-за неактивности время не истекает, за исключением того, что он не посещает сайт более 30 дней. Настройки в моем методе запуска owin отражают, что срок действия файла cookie составляет 30 дней (CookieAuthenticationOptions.ExpireTimeSpan установлен на 30 дней). Это работает независимо от платформы браузера (насколько я могу судить).
Пользователь не хочет «помнить меня», каково должно быть ожидаемое поведение, если сессионный cookie создается, а когда браузер закрывается, сессионный cookie удаляется из браузера. этодолжен убедитесь, что при следующем запуске браузера пользователь не будет аутентифицирован. Это особенно важно, когда совместно используемое устройство используется как общедоступный компьютер. Проблема не в том, что все браузеры всегда удаляют сеансовые куки, некоторые оставляют их специально, если включена настройка браузера (хороший пример - Chrome). Сеансовый cookie не имеет даты и времени истечения, поэтому CookieAuthenticationOptions.ExpireTimeSpan не имеет здесь никакого влияния. Вот где я ищу совет, потому что я уверен, что не смогу быть первым, кто столкнулся с этим. Вероятно, есть способ сделать это поведение более безопасным, поскольку альтернатива - ничего не делать и, возможно, оставить cookie-файл сеанса (который никогда не истекает!) В браузере.
Смотрите эту ссылку для более подробной информации о Chrome и сессионных куки.