如何使用.netcore 2.0身份和cookie身份验证正确设置会话超时

时间:2018-04-24 16:23:54

标签: asp.net-identity asp.net-core-2.0 session-timeout cookie-authentication

我试图在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));

我想我必须看看安全标记验证器的工作原理并正确定义验证间隔,因此会话不会意外关闭,但是,用户权限的修改不会被忽略,因为陈旧的饼干。

0 个答案:

没有答案