Cookie身份验证在ASP.NET Core中过早到期

时间:2017-08-09 16:02:59

标签: c# authentication asp.net-core-mvc

我有一个ASP.NET Core 1.1.2项目,我在其中使用cookie身份验证。我遇到一个问题,即在闲置一小时或更短时间后,用户被提示重新登录,并失去工作。下面的代码是我在Startup.cs中的Configure函数中使用的代码来设置它,我可以告诉它,它应该在至少8小时后到期。 BTW,ProjectProcessFlow只是项目的名称。

  app.UseCookieAuthentication(new CookieAuthenticationOptions()
  {
    AuthenticationScheme = "ProjectProcessFlow",
    LoginPath = new PathString("/Account/Login/"),       
    ExpireTimeSpan = new TimeSpan(8, 0, 0),
    SlidingExpiration = true,
    AutomaticAuthenticate = true,
    AutomaticChallenge = true
  });

我在NuGet中包含了Microsoft.AspNetCore.Authentication.Cookies v1.1.2。我需要做些什么来使登录到期在预期时间发生?

其他信息:

我发现当超时发生并且要求用户再次登录时,服务器上的事件查看器中记录了一条警告,表示它无法在项目下找到日志文件夹。所以我创建了该文件夹,并等待超时再次发生。发生这种情况时,在包含此文件夹的文件夹中创建了一个日志文件:

Hosting environment: Production
Content root path: C:\inetpub\wwwroot\Sprout
Now listening on: http://localhost:13423
Application started. Press Ctrl+C to shut down.

当我重复这个过程时,同样的事情发生了,除了在" localhost:"之后出现了一个不同的数字。我应该提到项目名称是ProjectProcessFlow,但URL以Sprout结束。

3 个答案:

答案 0 :(得分:4)

  

提示用户在闲置一小时后重新登录   或者更少,并且失去工作。

我有类似的configuration,但它对我来说很好。

我能想到的一件事是你不能让网络服务器闲置20分钟。 IIS的应用池默认空闲超时为20分钟 (我不能说其他Linux网络服务器)

因此,你可以设置更长的应用程序池超时(0表示无穷大),或者每隔5分钟从外部服务(如Monitis)进行ping操作。

enter image description here

答案 1 :(得分:1)

您是否在ConfigurationServices方法中设置了service.AddIdentity?

            services.AddIdentity<ApplicationUser, IdentityRole>(config =>
        {               
            //  Require a confirmed email in order to log in
            config.SignIn.RequireConfirmedEmail = true;
            // Cookie settings
            config.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(10);
            config.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn";
            config.Cookies.ApplicationCookie.LogoutPath = "/Account/LogOut";
        }).AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();

我遇到了类似的问题并在此处解决了 ASP.NET MVC Core Identity & Cookies

答案 2 :(得分:0)

我知道回答这个问题为时已晚,但是对于谁面对这个问题。 每20分钟和每20分钟IIS重置池ASP.NET会生成一个新密钥来保护cookie值(身份验证和会话)。为防止这种情况,请在ConfigureServices类的Startup中添加以下代码

services.AddDataProtection()
                .PersistKeysToFileSystem(new System.IO.DirectoryInfo("SOMW WHERE IS STORAGE"))
                //.ProtectKeysWithCertificate(new X509Certificate2());
                .SetDefaultKeyLifetime(TimeSpan.FromDays(90));

完整指南为here。全部关于DataProtection

相关问题