我想要的是:
- 将 JWT 存储在 localStorage 中。JWT 包含有关授权的声明。
- 防止 JWT 被攻击者窃取和使用(使用 XSS)
- 避免 CSRF
将 JWT 存储在 localStorage 中是不好的,因为利用 XSS 会导致 JWT 被盗,攻击者可以将其用于授权。
将 JWT 存储在仅 http 的 cookie 中是不好的,因为它没有足够的空间用于声明。
一个可能的解决方案是:
- 使用 sessionId 创建一个仅限 http 的 cookie
- 将 JWT 存储在 localStorage 中,并在其中加密相同的 sessionId
- 在服务器上,在使用声明之前验证 JWT 中的 sessionId 和 cookie 是否匹配。
这种方式可以窃取 JWT,但除非攻击者还拥有 cookie 中的 sessionId,否则无法使用。此外,CSRF 是不可能的,因为 cookie 不足以进行授权。
我的推理有什么缺陷吗?有没有更简单的方法来完成同样的事情?