c# - ASP.NET Core Identity 3 Cookie 超时

标签 c# asp.net-core asp.net-identity asp.net-core-mvc asp.net-identity-3

我在使用 RC2 时遇到了一个奇怪的问题。

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

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

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

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

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

此外,

如何获得到期前的剩余时间?我想访问该信息,以便我可以警告我的用户他们的 session 将在 X 时间后过期。

谢谢!

最佳答案

我发现了问题

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

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

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

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

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

关于c# - ASP.NET Core Identity 3 Cookie 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401272/

相关文章:

服务结构上托管的ASP.Net核心项目无法启动

angular - 在 headless 模式下,元素不可点击。但是当我们从 protractor.conf.js 中删除 headless 时,它工作正常。

asp.net-identity - OpenId Connect 中用户的唯一 ID 是什么

c# - 如何将虚拟路径映射到物理路径?

c# - 为什么在通过 IEnumerable<T> 更改 foreach 类型时没有出现编译器错误?

c# - 使用 mysql 在 c# 中创建注册表单

c# - 转换货币值

entity-framework - net core odata put和patch嵌套数据结构

.net-core - .NET Core 标识多种用户类型

asp.net-core - ASP.net Core 2.0 的密码历史记录