OWIN Authentication Cookie информация и принудительный вход в систему, даже если не истек - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу предоставить две функциональные возможности веб-сайту MVC 5 (OWIN) для файлов cookie для проверки подлинности: -

  • Показать срок действия файлов cookie для каждого пользователя
  • Принудительно выполнить вход,даже если срок действия файла cookie не истек

Как только пользователь вошел в систему, файл cookie и содержащиеся в нем претензии находятся в его браузере.

Мне удалось получить информацию о cookie,хотя он делает это при каждом посещении сервера.

Что касается принудительного входа в систему, мне нужно либо обновить cookie (это невозможно, если пользователь не взаимодействует с сайтом), либо искатьпользователь по имени в каждом логине.

Мой ответ ниже - если у кого-то есть лучший, пожалуйста, дайте мне знать

1 Ответ

0 голосов
/ 19 сентября 2018

В классе запуска OWIN я добавил собственный метод проверки личности.Администратор может установить поле в базе данных удостоверений, чтобы в следующий раз принудительно выполнить вход.Недостатком является попадание в базу данных каждый раз, когда пользователь посещает веб-страницу.

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

Этот код также извлекает информацию о файлах cookie для отображения в списке пользователей, которые может просматривать администратор.

private static Task MyCustomValidateIdentity(CookieValidateIdentityContext context)
        {
            var db = ApplicationDbContext.Create();
            var userName = context.Identity.GetUserName();
            var user = (from u in db.Users where u.UserName == userName select u).FirstOrDefault();

            if (user != null)
            {
                if (user.ForceLoginNextTime)
                {
                    user.ForceLoginNextTime = false;
                    db.SaveChanges();

                    context.OwinContext.Authentication.SignOut(context.Options.AuthenticationType);
                    context.Response.Redirect("/Home");
                }
            }

            var i = (from u in __userInfo where u.userName == userName select u).FirstOrDefault();

            if (i == null)
            {
                i = new UserInfo();
                __userInfo.Add(i);
            }

            i.userName = userName;
            i.CookieIssuedUtc = context.Properties.IssuedUtc;
            i.CookieExpiresUtc = context.Properties.ExpiresUtc;
            i.CookieIsPersistent = context.Properties.IsPersistent;

            return Task.FromResult(0);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...