JWT在使用无状态服务器的cookie中进行身份验证,并且没有服务器端呈现

问题描述 投票:2回答:1

我正在尝试在单页应用程序反应前端上实现身份验证的cookie中的jwt,它与运行快速的各种节点微服务进行通信。

我正在这样做,因为它似乎在sessionstorage中存储jwt使得应用程序容易受到XSS的攻击。

但是,通过使用cookie,api现在容易受到csrf攻击。

传统上,通过创建csrf令牌,将其存储在服务器会话中,然后在隐藏的表单字段中呈现它来减轻csrf攻击。然后,在提交表单时,将根据服务器会话值检查csrf令牌的值以检查它们是否匹配。

我不能使用这种方法: - 服务器是无状态的 - 没有服务器端渲染。

所以我很困惑我应该采用哪种csrf方法。我读过有关双提交方法的信息,你在每个ajax请求上提交一个csrf标记,并在cookie中存储相同的值,然后服务器检查两者是否匹配。

但是,由于没有服务器端呈现,我无法首先将初始csrf标记放入html中。

在没有服务器端渲染的无状态架构中,使用csrf保护实现cookie中jwt的最佳实践是什么?

node.js reactjs cookies jwt csrf
1个回答
0
投票

只是不要将JWT令牌存储在cookie中

CSRF攻击是可能的,因为浏览器将发送带有HTTP请求的cookie,即使它们是由第三方站点上运行的脚本启动的。因此,evilsite.com可能会向您的网络服务发送DELETE http://yoursite.com/items/1请求。此端点要求您登录,但因为浏览器将发送为yoursite.com存储的任何cookie,如果身份验证是基于cookie的,那么evilsite.com可以依赖您的身份验证方法并调用您的用户不打算调用他们的身份验证方法代表。

但是,身份验证不必基于cookie。如果要创建客户端呈现的JavaScript应用程序,则将身份验证令牌作为HTTP标头而不是cookie发送是很简单的。如果你这样做,那么evilsite.com就不可能使用你的令牌(它们只能使用存储在cookie中的令牌),而你从来没有遇到过这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.