我有 .Net MVC 4.8 应用程序,带有 Identity 和 Owin 2.2.4。
它启用了 ApplicationCookie 的 2FA,并且工作得很好。
查看以下
Startup.ConfigureAuth
的实现以了解更多信息。
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<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(10),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
这就是我在 AccontController 中登录用户的方式
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);
}
.AspNet.ApplicationCookie
cookie 并将其粘贴到单独的浏览器中,就可以登录,这会导致 VAPT 失败和会话劫持。validateInterval
中使用了短暂的CookieAuthenticationProvider
(如TimeSpan.FromSeconds(10))作为OnValidateIdentity,它工作得很好,但经过我的研究,我发现它会增加服务器负载并影响性能,因为它必须每十秒查询一次数据库或用户存储。但我不确定这是否是一个好主意,所以只是想确认是否有比这更合适的方法。
我的问题是如何确保用户即使复制应用程序cookie也无法在不同的浏览器中登录,在这种情况下,我如何提示他们重新登录?
任何建议或见解将不胜感激。谢谢!
您可以使用FingerprintJS。这是一个浏览器指纹识别库。试用版为14天试用期。