我正在开发一个使用 symfony 和 JWT 令牌进行身份验证的 Web 应用程序。为了防止 XSS,JWT 令牌存储在具有 HttpOnly 属性的 cookie 中。为了防止 CSRF,我使用了随机的 csrf 令牌。此令牌存储在 cookie 和 JWT 令牌(加密)中。我想知道的是,是否有必要在每个响应中更新 csrf 令牌?什么是最好的实现?
这是我的详细设置:
- 我们有一个单页应用程序。大多数请求将使用 ajax 发送。
- 用户使用 POST 进行身份验证。
- 成功验证后,服务器将生成随机 csrf 令牌,然后将其存储在 cookie (HttpOnly) 和 JWT 有效负载中。在存储在 JWT 有效负载中之前,csrf 令牌将被加密。
- JWT token 编码后会存储在cookies中(HttpOnly)
- 每次用户请求访问另一个页面时,服务器将在 JWT 令牌解码时验证 cookie 和 JWT 令牌中的 csrf 令牌。
- 未使用 LocalStorage,因为它可以通过 javascript 访问