Asp.net core 用户总是需要在20-30分钟后登录
无论我做了什么尝试,我似乎都无法将两次登录之间所需的时间增加超过20~30分钟。即使用户持续处于活动状态,也会出现这种情况,因此这不仅仅是“空闲”时间,而是两次登录之间的最长时间。 20分钟后,用户被重定向到登录页面再次登录 奇怪的是,当我将CookieOptions.ExpireTimeSpan减少到大约10秒时,它会在10秒后按预期重定向。我还测试了SlidingExpiration,这也很有效——使用较低的ExpiriteTimeSpan,任何大于20/30分钟的东西似乎都不起作用 我认为这可能与主机服务器的应用程序池设置有关。可能应用程序池在20分钟后死亡,导致登录无效,但即使我直接从VisualStudio运行应用程序,也会发生这种情况 老实说,我已经没有想法了,如果这是一个cookie问题,我甚至不知道如何调试它。即使有办法在登录后读取cookie上的ExpireTimeSpan值,我也非常感谢您的帮助 这是我当前启动时的代码:Asp.net core 用户总是需要在20-30分钟后登录,asp.net-core,asp.net-identity,asp.net-authentication,Asp.net Core,Asp.net Identity,Asp.net Authentication,无论我做了什么尝试,我似乎都无法将两次登录之间所需的时间增加超过20~30分钟。即使用户持续处于活动状态,也会出现这种情况,因此这不仅仅是“空闲”时间,而是两次登录之间的最长时间。 20分钟后,用户被重定向到登录页面再次登录 奇怪的是,当我将CookieOptions.ExpireTimeSpan减少到大约10秒时,它会在10秒后按预期重定向。我还测试了SlidingExpiration,这也很有效——使用较低的ExpiriteTimeSpan,任何大于20/30分钟的东西似乎都不起作用 我认为
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
//services.AddSingletons, Transients etc..
services.AddIdentity<IdentityUser, IdentityRole>()
.AddDefaultTokenProviders();
services.Configure<IdentityOptions>(options =>
{
// Password settings.
// Lockout settings.
// User settings.
});
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/Login";
//sliding expiration doesn't seem to work, nor does expiretimespan
options.SlidingExpiration = true;
options.ExpireTimeSpan = TimeSpan.FromHours(1);
});
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
config.Filters.Add(new AuthorizeFilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddHttpContextAccessor();
}
我使用以下方式登录:
[HttpPost]
[Route("/Login")]
[AllowAnonymous]
public async Task<ActionResult> Login(string returnUrl, LoginFormModel loginFormModel)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid) {
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(loginFormModel.Username, loginFormModel.Password, loginFormModel.RememberMe, lockoutOnFailure: true);
if (result.Succeeded) {
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
}
}
[HttpPost]
[路由(“/Login”)]
[异名]
公共异步任务登录(字符串returnUrl,LoginFormModel LoginFormModel)
{
returnUrl=returnUrl??Url.Content(“~/”);
if(ModelState.IsValid){
//这不会将登录失败计入帐户锁定
//要启用密码故障触发帐户锁定,请设置lockoutOnFailure:true
var result=wait _signInManager.PasswordSignInAsync(loginFormModel.Username,loginFormModel.Password,loginFormModel.RememberMe,lockoutOnFailure:true);
if(result.successed){
_logger.LogInformation(“用户登录”);
返回LocalRedirect(returnUrl);
}
}
}
如果有任何提示,我将不胜感激!谢谢 查看类似问题和错误报告
简言之,ASP.NET Core 2.1中存在漏洞。如果您正在实现自己的IUserStore,但未实现IUserSecurityStampStore,则即使cookie未过期,用户也会在30分钟后注销
快速修复方法是将安全戳验证增加到足够安全的值,如下所示:
services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromHours(10));
services.Configure(o=>o.ValidationInterval=TimeSpan.FromHours(10));
查看类似问题和错误报告
简言之,ASP.NET Core 2.1中存在漏洞。如果您正在实现自己的IUserStore,但未实现IUserSecurityStampStore,则即使cookie未过期,用户也会在30分钟后注销
快速修复方法是将安全戳验证增加到足够安全的值,如下所示:
services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromHours(10));
services.Configure(o=>o.ValidationInterval=TimeSpan.FromHours(10));
代码没有明显的问题,如果loginFormModel.Mememberme(isPersistent)为false,则ConfigureApplicationCookie
将不起作用,默认情况下它将发出会话cookie。@您认为会话cookie仍应持续浏览器会话的生命周期否?因此,如果ExpireTimeSpan设置为这样,它应该仍然停留一个小时。代码没有明显问题,如果loginFormModel.Memberme(isPersistent)为false,则配置应用程序OK将无法工作,默认情况下,它将发出会话cookie。@会话cookie应持续浏览器会话的生命周期。否?因此,如果ExpireTimeSpan设置为1小时,它仍应保持1小时。