【发布时间】:2021-08-09 07:39:27
【问题描述】:
我无法轻易决定如何从后端接收刷新令牌和访问令牌以及将其存储在何处。
我理解的认证过程如下。
- XSS 可以使用 cookie 进行防御。
- 使用 cookie 容易受到 CSRF 的攻击。
- 但是,对于 cookie,它可以作为“document.cookie”被盗。因此,请使用“httponly”选项来阻止来自 javascript 的访问。
- cookie 在发出 http 请求时总是包含在 header 中,因此容易受到 CSRF 的攻击。所以,登录时,'refresh token'和'access token'会在后端创建,存储在DB中,然后返回给客户端。李>
- 使用访问令牌请求 api,如果过期,使用刷新令牌进行更新。
我参考了很多文章,都说XSS要用cookies来阻止,CSRF要用refresh tokens和access tokens来保护。
在刷新令牌的情况下,它存储在webStorage中。
但是,为了防止XSS,似乎在访问令牌的情况下,应该使用cookie来保护它们(+ httponly应用),而在刷新令牌的情况下,似乎应该将它们存储在客户。
如果刷新令牌是在带有 httponly 选项的 cookie 中发送的,它不能从客户端访问吗?
总之……
在后端服务器中,是否应该将访问令牌作为 cookie 发送,并将刷新令牌包含在正文中?
任何想法都将不胜感激。
【问题讨论】:
-
我都在正文中发送 - 但是,如果您要将它们作为 http-only cookie 发送,虽然它们无法在客户端代码中访问,但它们将在未来的请求中发送(只要当然,当您在请求中发送 cookie 时)
-
@JaromandaX 感谢您的想法。你在哪里发送令牌到正文并存储访问令牌?
-
我在正文中从服务器发送令牌。我在客户端存储访问令牌
标签: javascript node.js cookies jwt token