我正在尝试在 asp.netcore 2.0 MVC 应用程序中使用身份和 cookie 身份验证。我想将会话超时设置为 150 天,这样登录的用户就不需要在很长一段时间内再次登录。我设置options.ExpireTimeSpan = TimeSpan.FromDays(150);
但会话在几分钟后关闭,即使用户正在积极使用该应用程序。
我正在关注官方文档,我的 Startup.cs 上有这个:
方法内ConfigureServices
:
services.AddIdentity<User, Role>()
.AddDefaultTokenProviders();
// Identity Services
services.AddTransient<IUserStore<User>, UserService>();
services.AddTransient<IRoleStore<Role>, RoleService>();
services.Configure<IdentityOptions>(options =>
{
// Password settings
options.Password.RequireDigit = false;
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequireLowercase = false;
options.Password.RequiredUniqueChars = 3;
// Lockout settings
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
options.Lockout.MaxFailedAccessAttempts = 10;
options.Lockout.AllowedForNewUsers = true;
// User settings
options.User.RequireUniqueEmail = true;
});
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromDays(150);
options.LoginPath = "/User/Login";
options.LogoutPath = "/User/Logout";
options.AccessDeniedPath = "/User/AccessDenied";
options.SlidingExpiration = true;
});
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
在Configure
我调用的方法中app.UseAuthentication();
并进行登录,我这样做:
var result = await _signInManager.PasswordSignInAsync(email, password, isPersistent: true, lockoutOnFailure: false);
我是否缺少任何配置?我理论我将到期时间设置为 150 天。
提前致谢。
编辑:*看起来问题出在 ValidationInterval 上。我发现了这个问题:https ://github.com/aspnet/Identity/issues/1513
我尝试将 ValidationInterval 设置为较大的值,现在会话没有关闭,用户也没有意外注销。这是设置间隔的代码:
services.Configure<SecurityStampValidatorOptions>(options =>
options.ValidationInterval = TimeSpan.FromDays(150));
我想我必须看看安全标记验证器是如何工作的并正确定义验证间隔,因此不会意外关闭会话,而且不会因为过时的 cookie 而忽略用户权限的修改。