c# - 如何使 ASP.NET Core 中的身份验证 cookie 无效?
问题描述
我在使 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,但是,如果我在.AspNetCore.Cookies
退出之前获取会话 cookie 的值,然后在将来的请求中将其重新添加,我就可以导航到需要用户身份验证的页面。
任何人都可以帮助解决这个问题?
注意:最初的问题是关于如何清除用户会话,但后来我意识到这实际上是关于 cookie 本身而不是服务器端会话的问题。
解决方案
这就是我执行注销方法的方式:
/// <summary>
/// Do the logout
/// </summary>
/// <returns></returns>
[HttpPost]
[ValidateAntiForgeryToken]
public async Task Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
//Important, this method should never return anything.
}
这里的技巧是让该方法不返回任何内容,因为 SignOut 方法将在内部生成自己的响应给浏览器。
推荐阅读
- tabulator - 暴露更多行?
- java - Apache Beam 写入转换写入多个文件?
- javascript - 如何获取 _form-opc 的增量 id - 动态表单 Yii2
- ios - 无法加载证书,Xcode 构建无法安装证书(VSTS/Azure DevOps,YAML Pipeline)
- angular - 无法将 `Route` 和 `ActivatedRouteSnapshot` 注入 `HttpInterceptor`
- jekyll - Jekyll 嵌套包含与 for 循环
- angular - IONIC2 日历:想要在隐藏所有小时行后将下一个可用行偏移到顶部
- sql - 查询以显示一列相乘
- ios - iOS 12 模拟器黑屏
- php - 错误“遇到非数字值” - 我尝试更改 PHP 版本,但仍然显示错误