首页 > 解决方案 > 如何使 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 本身而不是服务器端会话的问题。

标签: c#authenticationasp.net-core

解决方案


这就是我执行注销方法的方式:

/// <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 方法将在内部生成自己的响应给浏览器。


推荐阅读