Сессия вышла слишком рано - PullRequest
0 голосов
/ 23 ноября 2018

Я использую ASP.NET Core 2.1 с Microsoft Identity, и пользователи жалуются на то, что они продолжают перенаправляться на экран входа в систему только после 30 минут бездействия.Я настроил его на 60 минут в ExpireTimeSpan, но он никогда не будет таким длинным.Любые предложения?

Это то, что у меня есть в файле Startup.cs:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IRFDbRepository, RFDbRepository>();
        var connection = _configuration.GetConnectionString("RFDbConnection");
        services.Configure<ConnectionStrings>(_configuration.GetSection("ConnectionStrings"));
        services.AddDbContext<IdentityDbContext>(options => options.UseSqlServer(connection));
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddRazorPagesOptions(options =>
        {
            options.AllowAreas = true;
            options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
        });

        services.AddIdentity<User, UserRole>().AddDefaultTokenProviders();
        services.AddTransient<IUserStore<User>, UserStore>();
        services.AddTransient<IRoleStore<UserRole>, RoleStore>();

        services.ConfigureApplicationCookie(options =>
        {
            options.LoginPath = "/Identity/Account/Login";
            options.LogoutPath = "/Identity/Account/Logout";
            options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
            options.SlidingExpiration = true;
        });
    }

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IRFDbRepository rFDbRepository)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        loggerFactory.AddFile(_configuration.GetValue<string>("Logging:LogFile"));
        app.UseStaticFiles();

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            routes.MapRoute(
                name: "ActionApi",
                template: "api/{controller}/{action}/{id?}");
        });
    }

1 Ответ

0 голосов
/ 29 ноября 2018

Я наконец нашел корень этой проблемы.

Существует проблема с Identity в ASP.NET Core 2.1, из-за которой, если вы реализовали свою собственную версию UserStore, но не IUserSecurityStampStore, большинство функций касаютсяштампы безопасности будут пропущены.

Когда вы вызываете AddIdentity (), он проверяет правильность метки безопасности каждые 30 минут.

Это приводит к сбивающему с толку поведению, когда пользователь выходит из системы после 30минут, даже если срок действия файлов cookie не истек.

В ASP.NET Core 2.2, по-видимому, есть исправление для этого, более подробная информация здесь

https://github.com/aspnet/Identity/issues/1880

Тем временем вы можете либо получить свой UserStore по адресуреализовать IUserSecurityStampStore или сделать то, что я сейчас сделал, как быстрое решение, добавив его в файл startup.cs, который увеличивает время между отказами с 30 минут до 10 часов.

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

...