ASP.NET Core MVC 3.1在短时间后注销



在解释我面临的问题之前,我需要强调的是,这个问题不会发生在我的本地计算机上。只有当我将应用程序部署到AWS(Windows Server+IIS(时才会发生这种情况。

该应用程序具有许多Web API端点,这些端点具有[Authorize]属性。应用程序使用Cookie身份验证。您可以在此处查看此网站:https://saveonclouds.com

在Startup.cs中,我保留了cookie,并为其提供了一个自定义名称";saveoncloudscookie";。

然而,在登录后大约10分钟(通过用户名/密码和谷歌(,用户就会注销并看到登录页面!

由于该问题仅发生在托管环境中,因此解释部署可能对我有用:

浏览器-->CloudFlare(SSL/TLS(-->负载平衡器(AWS(-->EC2(仅一个实例(

在上面的部署模型中,SSL证书在负载均衡器上终止,因此AWS EC2通过HTTP而不是HTTPS接收流量。

我使用以下代码尝试并持久化authcookie,但它似乎不起作用:

对于谷歌登录:

services.AddAuthentication((.AddGoogle(options=>{选项。ClientId=AppSettings.Authentication.Google.ClientId;选项。ClientSecret=AppSettings.Authentication.Google.ClientSecret;选项。AccessDeniedPath="/Accounts/AccessDenied";;选项。CorrelationCookie.Expiration=新的时间跨度(1,0,0,0(;选项。SaveTokens=true;

options.Events = new OAuthEvents
{
OnAccessDenied = loginFailureHandler =>
{
loginFailureHandler.Response.Redirect("/Accounts/Signin");
loginFailureHandler.HandleResponse();
return Task.FromResult(0);
},
OnTicketReceived = ticket =>
{
ticket.Properties.ExpiresUtc = DateTimeOffset.UtcNow.AddDays(1);
ticket.Properties.IsPersistent = true;
ticket.Options.SaveTokens = true;
return Task.FromResult(0);
}
};
})

services.ConfigureApplicationCookie(option =>
{
option.Cookie.Name = "saveoncloudscookie";
option.Cookie.HttpOnly = true;
option.Cookie.SameSite = SameSiteMode.None;
option.Cookie.MaxAge = new TimeSpan(1,0,0,0);
option.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
option.LoginPath = "/Accounts/Signin";
option.AccessDeniedPath = "/Accounts/AccessDenied";
option.ExpireTimeSpan = TimeSpan.FromHours(authConfig.CookieExpirationHours);
option.SlidingExpiration = true;
});

我计时了一下,似乎四分钟后用户就可以注销了!

我是不是错过了什么?

问题是发生了EF Core异常,导致工作进程中断,因此应用程序必须重新启动并重新验证。这是如此悄无声息地发生,我只是通过在Visual Studio中将日志记录级别设置为Debug并读取"输出"窗口中的每一行文本来找到它!

最新更新