Как правильно установить время ожидания сеанса с использованием идентификатора .netcore 2.0 и аутентификации cookie - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь использовать идентификацию с аутентификацией cookie в приложении asp.netcore 2.0 MVC.Я хочу установить время ожидания сеанса около 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.

...