C# 会话过早注销

C# 会话过早注销,c#,asp.net-core,asp.net-identity,C#,Asp.net Core,Asp.net Identity,我使用的是ASP.NET Core 2.1和Microsoft Identity,用户抱怨说,在大约30分钟的不活动后,他们一直被重定向到登录屏幕。我已经设定了60分钟的呼气时间,但它从来不会持续那么长。有什么建议吗 这是Startup.cs文件中的内容: public void配置服务(IServiceCollection服务) { services.addScope(); var connection=_configuration.GetConnectionString(“RFDbConne

我使用的是ASP.NET Core 2.1和Microsoft Identity,用户抱怨说,在大约30分钟的不活动后,他们一直被重定向到登录屏幕。我已经设定了60分钟的呼气时间,但它从来不会持续那么长。有什么建议吗

这是Startup.cs文件中的内容:

public void配置服务(IServiceCollection服务)
{
services.addScope();
var connection=_configuration.GetConnectionString(“RFDbConnection”);
services.Configure(_configuration.GetSection(“ConnectionString”));
services.AddDbContext(options=>options.UseSqlServer(connection));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddRazorPagesOptions(选项=>
{
options.AllowAreas=true;
选项.约定.授权区域页面(“标识”,“/Account/Logout”);
});
services.AddIdentity().AddDefaultTokenProviders();
services.AddTransient();
services.AddTransient();
services.configureApplicationOK(选项=>
{
options.LoginPath=“/Identity/Account/Login”;
options.LogoutPath=“/Identity/Account/Logout”;
options.ExpireTimeSpan=TimeSpan.FromMinutes(60);
options.SlidingExpiration=true;
});
}
public void配置(IApplicationBuilder应用程序、IHostingEnvironment环境、ILoggerFactory日志工厂、IRFDbRepository rFDbRepository)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Home/Error”);
}
AddFile(_configuration.GetValue(“Logging:LogFile”);
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(路由=>
{
routes.MapRoute(
名称:“默认”,
模板:“{controller=Home}/{action=Index}/{id?}”);
routes.MapRoute(
名称:“ActionApi”,
模板:“api/{controller}/{action}/{id?}”);
});
}

我终于找到了这个问题的根源

ASP.NET Core 2.1中的Identity存在一个问题,如果您实现了自己版本的UserStore,但没有实现IUserSecurityStampStore,则将跳过与安全戳相关的大多数功能

调用AddIdentity()时,它每30分钟对securityStamp进行一次验证检查

这会导致令人困惑的行为,即用户在30分钟后注销,即使cookie没有过期

ASP.NET Core 2.2中有一个修复程序,这里有更多详细信息

同时,您可以让UserStore实现IUserSecurityStampStore,也可以像我现在所做的那样快速修复,将其添加到startup.cs中,从而将两次失败之间的时间从30分钟增加到10小时


services.Configure(o=>o.ValidationInterval=TimeSpan.FromHours(10))

var result=wait\u-signInManager.PasswordSignInAsync(Input.Email,Input.Password,Input.RememberMe,lockoutOnFailure:True)中尝试将
RememberMe
设置为
True
现在试过了,恐怕没什么不同。无论如何谢谢你