【发布时间】:2020-05-07 16:03:41
【问题描述】:
我在使 ASP.NET Core 3.0 中的身份验证 cookie 无效时遇到问题。
场景
我有一个登录网站的用户。当他们单击注销按钮时,它会调用以下代码:
[HttpGet]
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
HttpContext.Session.Clear();
return RedirectToAction("Index", "Home");
}
这成功清除了浏览器中的所有 cookie,但是,如果我在退出之前获取会话 cookie .AspNetCore.Cookies 的值,然后在以后的请求中将其重新添加,我就可以导航到页面这需要用户身份验证。
谁能帮忙解决这个问题?
注意:最初的问题是关于如何清除用户会话,但后来我意识到这实际上是关于 cookie 本身的问题,而不是服务器端会话。
【问题讨论】:
-
你试过 Session.Abandon() 吗?这应该只是放弃整个会话
-
stackoverflow.com/a/57976991/9936356 Response.Cookies.Delete(cookie)
-
这里没有服务器端会话。 cookie 完全 代表用户经过身份验证的会话。您要在这里解决的问题是什么?即为什么这是一个问题?
-
这不是您通常需要担心的事情。对于使用 TLS 发送的安全、仅限 http 的 cookie,攻击向量非常有限。不过,您可以查看
OnValidatePrincipal来帮助拒绝身份验证 cookie,但没有内置支持来决定何时这样做。 -
我解决这个问题的方法是在cookie和数据库中存储一个guid作为连接到用户的会话。如果用户注销,则数据库中的会话将被标记为“注销”,然后此 cookie 将被拒绝为对任何进一步的身份验证有效 - 问题是我必须在每个请求上验证 cookie,但对于我的案例安全很重要。
标签: c# authentication asp.net-core