首页 > 解决方案 > SignOutAsync() 不注销用户

问题描述

我有一个 MVC 应用程序,它有几个 WebAPI 端点。这样做的原因是我们有一个应该能够与应用程序通信的应用程序。对于身份验证,我使用的是身份。

在我登录并想再次注销后,它可以在 UI 中使用。因此,我在我的一个 API 端点的注销操作中实现了相同的逻辑:

public async Task<JsonResult> LogOut()
{
    await _signInManager.SignOutAsync();            
    _logger.LogInformation("User logged out.");

    return new JsonResult(new { Anything = "Logout successful." });
}

当我搜索相同的问题时,我还尝试了我在这里找到的大多数方法。但是,无论我做什么,cookie“.AspNetCore.Identity.Application”总是在下一个请求中,我仍然通过身份验证。

我正在使用 Postman 来测试 API 端点,如果这有什么不同的话。

标签: c#asp.net-coreasp.net-web-apiidentitylogout

解决方案


现在您只有 cookie 身份验证,当您调用时SignOutAsync()正在生成响应,指示删除身份验证 cookie,并响应该浏览器删除身份验证 cookie,因此在下一次调用中没有 cookie 并且您不再登录但是如果您在退出前存储身份验证 cookie,然后在退出后将其添加到浏览器中,您仍然处于登录状态,因为您的凭据在 cookie 中。

所以这就是浏览器的行为方式,而你在 postman 或HttpClient.

您的选择是为您的 api使用参考令牌

或者

您可以使用 Cookie 身份验证配置会话存储


推荐阅读