Обновлять куки сессии после аутентификации - PullRequest
0 голосов
/ 12 апреля 2019

У нас есть двухфакторная аутентификация для входа в нашу систему.

  1. Пользователь должен войти в систему, используя имя пользователя / пароль.
  2. На следующей странице пользователь должен ответить на секретные вопросы, чтобы успешно войти в наше приложение.

Мы создаем несколько сеансов после успешной аутентификации пользователя на шаге № 1. Эта информация о сеансе будет использоваться в приложении.

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

if(!IsPostBack)
{
            HttpContext.Current.Session.Clear();
            HttpContext.Current.Session.Abandon();
            HttpContext.Current.Session.RemoveAll();
            Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
}

Приведенный выше код очистит идентификатор сеанса в файле cookie сеанса. Теперь, когда пользователь вводит соответствующие учетные данные, asp.net автоматически создаст новый идентификатор сеанса, поэтому браузер получит новый сеанс после успешной аутентификации. Если пользователь ввел неправильные учетные данные, то, используя приведенный выше код, я снова сбрасываю идентификатор сеанса, чтобы новый идентификатор сеанса автоматически создавался при успешной аутентификации.

Этот подход хорошо работал для однофакторной аутентификации, и фиксация сеанса больше не была дефектом в отчетах о безопасности. Но с многофакторной аутентификацией это все еще проблема. Я не мог использовать приведенный выше код для сброса sessioid cookie на странице, где я проверяю ответы безопасности, поскольку приложение теряет все переменные сеанса, созданные на шаге № 1.

Как обходной путь в # 2, после успешного ответа на вопросы безопасности я попытался сохранить значения сеанса во временном объекте и сбросить sessioid в файле cookie и переназначить объект переменным сеанса снова, но sessionid не восстанавливается при этом момент времени, поэтому я не могу сохранить сеанс, и приложение начинает генерировать исключения везде, где к этим переменным сеанса обращаются.

Ниже приведено событие, вызванное успешной аутентификацией на шаге № 2, стр.

.
private void Sucess()
{
       login = Session.logininfo           
       HttpContext.Current.Session.Abandon();
       HttpContext.Current.Session.RemoveAll();
       Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
       Session.logininfo = login;     
        Response.Redirect("New.aspx", true);
}

Могу ли я узнать, есть ли лучший способ обновить куки сеанса в этом случае.

...