Я установил ExpireTimeSpan на один день, но у меня есть служба уведомлений в пользовательском интерфейсе, которая отправляет вызов ajax каждые 5 минут, поэтому вызов ajax продлит время истечения срока действия, в результате чего система не выйдет из системы по истечении определенного периода времени, если пользователь в активном состоянии, как я могу решить эту проблему
int expireTime = 1440; //one day
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromMinutes(expireTime),
SlidingExpiration=true,
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
Я нашел это решение для ядра asp.net: https://medium.com/cacti-pins/conditional-set-sliding-expiration-time-on-authentication-cookies-in-asp-net-core-e70ffe7da49d но я использую .net4.5
Я не думаю, что есть какое-то простое решение этой проблемы, но есть несколько способов, на которые вы могли бы обратить внимание.
Прежде всего, вы можете рассмотреть возможность использования WebSockets для службы уведомлений. В приложении на C# было бы разумно использовать SignalR. Это позволит вам открыть постоянное соединение между клиентом и сервером и включить принудительную отправку сервера, которая должна включать отправку cookie только при первоначальном подключении. Помните, что по умолчанию SignalR может перейти на длительный опрос, если другие параметры не поддерживаются в браузере, который по-прежнему страдает от той же проблемы.
В качестве альтернативы вы можете посмотреть замену вызова ajax на javascript fetch()
. Это позволит вам опустить cookie при отправке запроса. Однако вам нужно будет сгенерировать альтернативный токен авторизации в вашем приложении и управлять им. Вам также может потребоваться переместить службу уведомлений в отдельное приложение, чтобы оно не использовало ту же схему аутентификации.
Я не уверен, что это поможет - аутентификация происходит дальше по конвейеру, все, что вам нужно сделать, это вывести пользователя из системы при следующем полном запросе.
Я использовал этот фильтр перед действием, но я не знаю, как очистить файл cookie owin в общедоступном классе ответа DoNotExtendAuthenticationAttribute: ActionFilterAttribute {// как очистить файл cookie owin в ответе}