【问题标题】:ASP.NET Core 3.1 / Identity session never expires. How can I get it to expire on sliding expiration?ASP.NET Core 3.1 / 身份会话永不过期。我怎样才能让它在滑动到期时到期?
【发布时间】:2024-01-16 23:04:02
【问题描述】:

我网站的安全检查显示会话(即登录)永不过期。我已经对自己进行了测试,我发现相同 - 我今天早上在 localhost 上打开了该站点,但我仍然从昨天开始登录。我一直认为它会在 20 分钟后过期,就像在 .NET Framework 应用程序中一样。

我正在使用 ASP.NET Core Identity 脚手架,除了实现两因素身份验证外,只进行了少量更改。

在我的 Startup.cs 中,我有以下代码来添加会话支持:

services.AddSession(options =>
{
    options.Cookie.IsEssential = true;
    options.IdleTimeout = TimeSpan.FromSeconds(10);
    options.Cookie.Expiration = TimeSpan.FromSeconds(10);
});

我在 IdentityOptions 下看不到任何与登录超时有关的代码。

在登录页面上,我专门将任何“记住我”类型的函数硬编码为 false:

await _signInManager.SignInWithClaimsAsync(user, isPersistent: false, claims);

如何让我的登录会话在大约 20 分钟后过期,就像它们在 .NET Framework 中自动执行的一样?

我基本上有与这个问题中提到的完全相反的问题: asp.net-core2.0 user auto logoff after 20-30 min

这里的大多数问题似乎都在询问如何增加超时,但我需要将它从(看似)无限减少到 20 分钟左右:

【问题讨论】:

  • 这两个,会话和身份是不相关的。这里的session与服务器端的会话状态容器有关。您的身份过期设置应在 UseCookieAuthentication 中间件配置中。
  • @WiktorZychla - 我使用的是 .NET Core 3.1,所以 UseCookieAuthentication 不存在。
  • 是的,配置已被移动,但仍然是两个不相关的配置。

标签: asp.net asp.net-core asp.net-identity session-state


【解决方案1】:

发现必须在Startup.cs中添加如下代码来设置ApplicationCookie的过期时间:

services.ConfigureApplicationCookie(options => options.ExpireTimeSpan = TimeSpan.FromMinutes(20));

我首先使用 .FromSeconds(10) 对其进行了测试,10 秒后我退出了。

这个函数的文档在这里:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-3.1#cookie-settings

【讨论】:

    最近更新 更多