如何使用存储在HttpOnly Cookie中的令牌注销

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用存储在HttpOnly Cookie中的令牌注销相关的知识,希望对你有一定的参考价值。

我目前正在使用Microsoft的Identity在Asp .NET Web API项目中帮助我的Auth。我正在生成一个持票人令牌并将其存储在名为HttpOnlyAUTH cookie中

由于我没有在我的数据库中存储与令牌相关的任何内容,我该如何注销?在我将令牌存储在会话存储中之前,我只是将其移除到客户端,但现在因为我将令牌存储在HttpOnly cookie中,所以我无法做任何客户端操作。

我是否在服务器上调用使用新cookie AUTH进行响应并且值为空的路由?我试过了,但来自logout的响应cookie似乎没有取代HttpOnly cookie,它只是创建了一个会话cookie。

这就是我生成AUTH cookie的方法

context.Response.Cookies.Append("AUTH", accessToken,
                                new Microsoft.Owin.CookieOptions
                                {
                                     HttpOnly = true,
                                     Expires = DateTime.UtcNow.AddMinutes(5)
                                });

这就是我从logout路线生成响应的方式。

var authCookie = new CookieHeaderValue("AUTH", "");
var xsrfCookie = new CookieHeaderValue("XSRF", "");

ActionContext.Response = new HttpResponseMessage();
ActionContext.Response.Headers.AddCookies(new CookieHeaderValue[] { authCookie, xsrfCookie });

return ActionContext.Response;

出于某种原因,此处返回的cookie不会覆盖使用auth令牌创建的cookie。

这是在HttpOnly cookie中存储身份验证令牌时注销用户的最佳策略吗?

答案

如果您没有存储身份验证令牌,那么您不能使其无效。因此,您可以强制浏览器从服务器中删除Cookie。尝试添加DomainPath。您还可以将Expires设置为昨天,以便浏览器在收到cookie后立即将其删除。

authCookie.HttpOnly = true;
authCookie.Expires = DateTime.UtcNow.AddDays(-1);
authCookie.Domain = "localhost";
authCookie.Path = "/";

xsrfCookie.Expires = DateTime.UtcNow.AddDays(-1);
xsrfCookie.Domain = "localhost";
xsrfCookie.Path = "/";

以上是关于如何使用存储在HttpOnly Cookie中的令牌注销的主要内容,如果未能解决你的问题,请参考以下文章

如何在前端使用 HttpOnly jwt cookie

如何在 ngCookies 中设置 httpOnly 标志?

如何使用 DRF djangorestframework-simplejwt 包将 JWT 令牌存储在 HttpOnly cookie 中?

如何HttpOnly的cookie与AJAX请求工作

ReactJS 和 DRF:如何将 JWT 令牌存储在 HTTPonly cookie 中?

你如何在 PHP 中设置使用 HttpOnly cookie