Обновление файлов cookie сеанса после аутентификации

#c# #asp.net #session-cookies

#c# #asp.net #сеансовые файлы cookie

Вопрос:

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

  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 автоматически создаст новый идентификатор сеанса, так что браузер получит новый сеанс после успешной аутентификации. Если пользователь ввел неправильные учетные данные, то, используя приведенный выше код, я снова сбрасываю идентификатор сеанса, поэтому новый идентификатор сеанса будет автоматически сгенерирован при успешной аутентификации.

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

В качестве обходного пути в # 2, после успешного ответа на контрольные вопросы, я попытался сохранить значения сеанса во временном объекте и сбросить значение сеанса в файле 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);
}
  

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

Комментарии:

1. Как работает ваш первый фактор? Используете ли вы ASP.NET формы аутентификации? OAuth? и т.д.

2. Я использую стандартный ASP.NET формирует аутентификацию.