private async Task SignInUser(ApplicationUser user, string authType)
{
await UserManager.UpdateSecurityStampAsync(user.Id);
var identity = await UserManager.CreateIdentityAsync(user, authType);
var authProperties = new AuthenticationProperties { IsPersistent = false };
AuthenticationManager.SignIn(authProperties, identity);
}
Новое требование:
Существует способ, которым пользователь может войти в систему, если он скопирует файл cookie .AspNet.ApplicationCookie и вставит его в отдельный браузер, это приведет к сбою VAPT и перехвату сеанса.
Теперь я знаю, что если кто-то имеет этот файл cookie, то они смогут войти в систему. но конкретно в этом случае я хочу, чтобы пользователь повторно вошел в систему, даже если у него есть файлы cookie и он пытается запуститься в другом браузере.
Подходы, которые я рассматривал до сих пор:
Использовал кратковременный validateInterval (например, TimeSpan.FromSeconds(10)) для OnValidateIdentity в CookieAuthenticationProvider, он работал очень хорошо, но после исследования я обнаружил, что это увеличит нагрузку на сервер и повлияет на производительность, поскольку ему приходится запрашивать базу данных или пользовательское хранилище каждые десять секунд.
Сохранение информации об устройстве или IP-адресе во время входа в систему и ее проверка на соответствие данным текущего сеанса.
Но я не уверен, что это хорошая идея, и поэтому просто хотел подтвердить, есть ли более правильный подход, чем этот. Мой вопрос: Как я могу гарантировать, что пользователь не сможет войти в систему в разных браузерах, даже если он скопирует файлы cookie приложения, и в этом случае, как я могу предложить ему повторно войти в систему?Мой вопрос p>
Будем очень признательны за любые предложения и идеи. Спасибо!
Контекст: [list] [*]У меня есть приложение .Net MVC 4.8 с Identity и Owin 2.2.4. < /li> 2FA включена с помощью ApplicationCookie и работает отлично.
[*]Проверьте ниже реализацию Startup.ConfigureAuth для получения дополнительной информации информация. [code]app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), ExpireTimeSpan = TimeSpan.FromMinutes(30), SlidingExpiration = true, CookieSecure = CookieSecureOption.Always, CookiePath = "/", CookieSameSite = SameSiteMode.Strict, Provider = new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator.OnValidateIdentity( validateInterval: TimeSpan.FromMinutes(10), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) } }); [/code]
[*]И вот как я вхожу в систему в AccontController [code]private async Task SignInUser(ApplicationUser user, string authType) { await UserManager.UpdateSecurityStampAsync(user.Id);
var identity = await UserManager.CreateIdentityAsync(user, authType); var authProperties = new AuthenticationProperties { IsPersistent = false };
[/list] Новое требование: [list] [*]Существует способ, которым пользователь может войти в систему, если он скопирует файл cookie .AspNet.ApplicationCookie и вставит его в отдельный браузер, это приведет к сбою VAPT и перехвату сеанса. [*]Теперь я знаю, что если кто-то имеет этот файл cookie, то они смогут войти в систему. но конкретно в этом случае я хочу, чтобы пользователь повторно вошел в систему, даже если у него есть файлы cookie и он пытается запуститься в другом браузере. [/list] Подходы, которые я рассматривал до сих пор: [list] [*]Использовал кратковременный validateInterval (например, TimeSpan.FromSeconds(10)) для OnValidateIdentity в CookieAuthenticationProvider, [b]он работал очень хорошо[/b], но после исследования я обнаружил, что это увеличит нагрузку на сервер и повлияет на производительность, поскольку ему приходится запрашивать базу данных или пользовательское хранилище каждые десять секунд. [*]Сохранение информации об устройстве или IP-адресе во время входа в систему и ее проверка на соответствие данным текущего сеанса. [/list] Но я не уверен, что это хорошая идея, и поэтому просто хотел подтвердить, есть ли более правильный подход, чем этот. [b]Мой вопрос:[/b] Как я могу гарантировать, что пользователь не сможет войти в систему в разных браузерах, даже если он скопирует файлы cookie приложения, и в этом случае, как я могу предложить ему повторно войти в систему?[b]Мой вопрос[/b] p> Будем очень признательны за любые предложения и идеи. Спасибо!