ASP.NET Core Identity 3 Cookie 超时

Posted

技术标签:

【中文标题】ASP.NET Core Identity 3 Cookie 超时【英文标题】:ASP.NET Core Identity 3 Cookie timeout 【发布时间】:2016-11-18 23:14:55 【问题描述】:

RC2 发生了一个奇怪的问题。

我已使用以下配置选项将 Identity 3 ExpireTimeSpan 设置为 12 小时

options.Cookies.ApplicationCookie.ExpireTimeSpan = new TimeSpan(12,0,0);

登录网站并保持大约 35-40 分钟不变后,我收到 401 错误(对于我的 ajax 帖子调用)并刷新网站后,我返回登录页面。

为什么我将 ExpireTimeSpan 设置为 12 小时后必须重新进行身份验证?

我需要其他设置或配置吗?

还有,

我怎样才能得到到期前的剩余时间?我想访问该信息,以便警告我的用户他们的会话将在 X 时间后过期。

谢谢!

【问题讨论】:

【参考方案1】:

我发现了问题

问题在于 SecurityStamp 机制。 默认情况下,每 30 分钟验证一次安全标记。这主要是因为可以选择在任何地方登录。 例如,当用户更改密码时,通常会以身份更新安全标记。 这将使用户登录的所有位置(除了他更改密码的位置)在 30 分钟后退出,因为标记(通常是 guid)已更改。

要实现此功能,请在您的 UserStore 中实现 ISecurityStampStore<T> 接口并实现 GetSecurityStampAsync(User user, CancellationToken cancellationToken) 方法

有关更多信息,您可以查看安全印章验证器代码以及它在 30 分钟后将您退出的原因

https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/SecurityStampValidator.cs

注意: options.SecurityStampValidationInterval 可以设置增加检查时间,但不能解决问题。 X 次之后,您仍会退出。

【讨论】:

所以没有滚动到期或类似的东西?太糟糕了!我想这也是我需要的。我的 cookie 在 30 分钟时超时,即使我的会话继续保持有效... 您能否发布您的代码,因为它位于您的项目中。即使合并您提到的更改,我仍然无法让我的工作。 Startup.cs 文件等 您是否使用数据库作为后端?活动目录?这完全取决于您的环境!如果您可以做一个提琴手或其他我们可以看到代码的东西,那将很有帮助! 是的,数据库后端,全部托管在 Azure 上。我今晚再试一次,然后回复你。 你有没有找到解决方案来解决它在 .net 中的问题?干杯。

以上是关于ASP.NET Core Identity 3 Cookie 超时的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net core MVC6如何在Identity 3中初始添加角色

ASP.NET Core Identity 3.1:UserManager.RemoveFromRoleAsync 总是返回 UserNotInRole

ASP.NET Core Identity Server 3自定义修改Token过期刷新时间

ASP.NET Core 3:无法从根提供程序解析范围服务“Microsoft.AspNetCore.Identity.UserManager`1[Alpha.Models.Identity.User

将 JWT 自动加载到 User.Identity (ASP.NET Core 3.1)

ASP.NET Core 3.1 中基于角色的授权,带有 Identity 和 ExternalLogin