【问题标题】:ASP.NET Core 2.0+ - How to Keep Claims Up-to-date [duplicate]ASP.NET Core 2.0+ - 如何使声明保持最新 [重复]
【发布时间】:2018-06-15 15:28:56
【问题描述】:

我正在涉足 ASP.NET Core,我正试图围绕身份授权层,以及如何确保我的 cookie 声明保持最新。

我正在使用默认的身份层和 cookie。因此,根据我已经能够调试并弄清楚的是,当我登录时,框架会从数据库中获取所有这些数据,例如他们所处的角色,并将其放入 cookie 中。然后,如果我停止调试并重新启动它,我的 cookie 仍然存在,因此我们不必返回数据库(据我所知)。这很好,但是......我如何让我的角色保持最新。这意味着,如果在创建 cookie 后数据库中的角色发生了变化怎么办。

例如,如果经理介入并改变员工的角色会怎样。我们如何确保员工 cookie 知道角色已更改并需要重新获取用户?

【问题讨论】:

  • 已经有一个内置的机制使cookies失效,即安全标记。更改角色时,应使用数据库中的新 GUID 对其进行更新。安全标记也存储在 cookie 中,并以预定义的时间间隔(默认 30 分钟)与数据库中的时间间隔进行比较,以检查 cookie 的有效性。

标签: c# asp.net-core .net-core claims-based-identity


【解决方案1】:

首先,cookie 仍然存在,但只有在您关闭浏览器并再次打开它之前,浏览器应该删除 cookie,因为它没有设置永久到期日期。在默认设置中,您的 cookie 没有设置到期日期,因此它们将在关闭浏览器时被删除。

然后,令牌内容本身具有到期日期(与 cookie 在 HTTP 协议级别是否具有到期日期无关)。当令牌过期时,服务器将请求视为匿名并强制执行身份验证流程。因此,即使浏览器长时间拥有相同的cookie,它迟早会过期(令牌过期日期是服务器端的配置参数之一)。

唯一真正的问题是当用户使用网站并且他们的角色在后台更改时会发生什么 - 在默认设置中,新角色在他们重新登录之前不会反映。

【讨论】:

  • 对此有什么“最佳实践”吗?我们希望将 cookie 存储在浏览器的当前会话之外,这样他们就不必每天登录。知道我们不是唯一希望发生这种情况的应用程序,其他人如何维护 cookie 中的数据?
  • owasp.org/index.php/Session_Management_Cheat_Sheet 因此,强烈建议使用非持久性cookies进行会话管理,以便会话ID不会长时间保留在Web客户端缓存中,攻击者可以从哪里获得它。 这是安全角度。还有另一个——可用性的观点。您需要自己将其中一项放在更重要的位置。
猜你喜欢
  • 2018-01-24
  • 2019-11-22
  • 1970-01-01
  • 2018-12-28
  • 2016-12-25
  • 2018-08-20
  • 2018-06-16
  • 2018-05-08
  • 1970-01-01
相关资源
最近更新 更多