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



目前,我的web应用程序上有登录功能,在我发出登录请求后,服务器会用一个包含2个令牌的JSON对象进行响应:

这是登录功能:

async function login() {
const data = {
"email": "user1@gmail.com",
"password": "testPassword123"
}
const response = await Backend.post('auth/login/', data)
console.log(response.data)
}

这就是回应:

{
"access": "access_token_here",
"refresh": "refresh_token_here" 
}

据Postman称,该回复还包含3个cookie:

1) access_token=access_token_here; Path=/; Domain=localhost; HttpOnly; Expires=Thu, 29 Oct 2020 06:49:56 GMT;
2) csrftoken=csrf_token_here; Path=/; Domain=localhost; Expires=Thu, 28 Oct 2021 06:44:56 GMT;
3) sessionid=session_id_here; Path=/; Domain=localhost; HttpOnly; Expires=Thu, 12 Nov 2020 06:44:56 GMT;

要向服务器中受保护的端点发出请求,我可以将access_token作为cookie或Bearer令牌发送。我的理解是,将这些代币存储在本地存储中不是很安全。

那么我如何将它们存储在httpOnly cookie中呢?或者有更好的方法来处理这个问题吗?

我的后端服务器使用Django Rest Framework。

我想你想设置httpOnly cookie,因为它比在localStorage中设置令牌更安全?

最安全的方法是只将令牌存储在内存(状态(中,而不将其存储在cookie或localStorage中。每次刷新页面后,强制用户再次登录。这就是银行网站的运作方式。

如果您需要在客户端存储令牌(您不想在每次刷新后强制登录(,那么我建议您使用localStorage而不是cookie。React本身受到XSS的保护。但是,如果会有XSS,那么,当然,localStorage数据很容易读取,但cookie(甚至httpOnly(中的数据也可能被利用(通过使用可用cookie发送请求(。localStorage和cookie都容易受到XSS的攻击,但正如我所写的,React有针对XSS的保护。使用localStorage在实现中也更容易。

请参阅此讨论:链接到reacjs子版块reddit。

您可以使用set_cookie(key,value,https=True(进行设置,并在react请求中使用{withcredentials=True}你可以参考这篇文章https://www.procoding.org/jwt-token-as-httponly-cookie-in-django/

最新更新