Как разлогинить всех пользователей сайта?

Рейтинг: 0Ответов: 1Опубликовано: 12.01.2023

Требуется разлогинивать всех пользователей в определенное время каждый день. Для аутентификации используется .AspNetCore.Identity. Можно ли вызвать .SignOutAsync() для всех пользователей? Если нет, то как вызвать этот метод для каждого залогиненого пользователя? Проблема заключается в том, что некоторые из пользователей не умеют обновлять страницу, как бы странно это не звучало. Может быть есть другой путь обновлять их страницы принудительно? Также возникает вопрос, можно ли использовать для этого Quartz, ведь он работает в одном экземпляре для сервера, не создавая экземпляр для каждой отдельной сессии.

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    // укзывает, будет ли валидироваться издатель при валидации токена
                    ValidateIssuer = true,
                    // строка, представляющая издателя
                    ValidIssuer = AuthOptions.Issuer,

                    // будет ли валидироваться потребитель токена
                    ValidateAudience = true,
                    // установка потребителя токена
                    ValidAudience = AuthOptions.Audience,
                    // будет ли валидироваться время существования
                    ValidateLifetime = true,

                    // установка ключа безопасности
                    IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
                    // валидация ключа безопасности
                    ValidateIssuerSigningKey = true,
                };
            });
        services.ConfigureApplicationCookie(options =>
        {
            //экспериментировал с этим параметром, но он добавляет
            //время к авторизации, а нужно сбрасывать всем , в одно 
            // и тоже время.
            // можно было бы вычислить тут время суток
            // но возникает вопрос:
            // будет ли оно вычисляться отдельно для каждой
            // аутентификации или DateTime.Now будет константой
            // вычисленной при старте приложения
            options.ExpireTimeSpan = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 15, 25, 00) - DateTime.Now; 
        });

Ответы

▲ 0

Требуется разлогинивать всех пользователей в определенное время каждый день

В настройках авторизации выдавайте время действия кук (Если у вас авторизация на куках) на период

var expiretionTime = new DateTime("Дату, когда нужно разлогинить") - DateTime.Now;

А потом просто в конфигурации авторизации закиньте это значение в время жизни вашей куки