【发布时间】:2018-08-12 19:21:05
【问题描述】:
如果我删除了具有基于 cookie 的授权的用户,在他按下注销按钮之前,他仍然可以访问系统。或者直到 cookie 过期。
如何解决这种情况。
【问题讨论】:
-
使用
SignInManager.SignOutAsync()
标签: c# asp.net visual-studio asp.net-core
如果我删除了具有基于 cookie 的授权的用户,在他按下注销按钮之前,他仍然可以访问系统。或者直到 cookie 过期。
如何解决这种情况。
【问题讨论】:
SignInManager.SignOutAsync()
标签: c# asp.net visual-studio asp.net-core
这是删除用户访问权限时基于声明的身份验证的一般问题。由于它的设计方式,不会在每次请求时都访问数据库以验证访问。相反,加密签名的 cookie 被认为是事实的来源。因此,当数据库中的访问权限被删除时,cookie 仍然有效,在这种情况下如何更新用户的 cookie 并非易事。由于它是存储在客户端的cookie,因此您也不能只是远程注销用户。
但是 ASP.NET Core Identity 中有一种机制可以强制 cookie 身份验证方案在特定时间间隔内重新验证身份。您可以在Startup 的ConfigureServices 方法中这样配置:
services.Configure<SecurityStampValidatorOptions>(options =>
{
options.ValidationInterval = TimeSpan.FromMinutes(10);
});
这会将间隔设置为 10 分钟。因此,每 10 分钟,将验证使用现有 cookie 访问您网站的用户,并发布一个新 cookie。这个过程是完全无声的,并且发生在幕后。
根据您希望执行此操作的严格程度,您必须进一步降低此间隔。我通常会建议您在一定时间内仍然保留它。否则,您将违背缓存身份的目的。
您还应该考虑,如果用户仍然可以访问您的网站,这会带来多大的问题,以及移除用户的时间紧迫性。根据您的应用程序,您也不太可能在关键操作中检索用户实体,因此在这种情况下这会自动失败,而您不必通过删除 cookie 来拒绝访问。
【讨论】: