【发布时间】:2019-09-23 00:04:02
【问题描述】:
现在我正在开发一个 React/Redux 全栈应用程序,我正在设置 JWT 身份验证并通过 cookie 传递 JWT。我有几个关于处理服务器生成的 CSRF 令牌的问题。
1) 在服务器端设置 CSRF 令牌后,它会传递给客户端吗?它究竟是如何通过的? (我见过它作为一个对象传入的例子,但我发现的那些没有很好地解释或只是稀缺)
server.js
// config csrf in server
app.use(csrf({
cookie: {
key: '_csrf',
secure: true,
httpOnly: true,
sameSite: 'strict',
maxAge: 86400
}
}))
// Hits my api routes, and if these arent hit, the index.html file is rendered
app.use(routes)
// Route used to fetch the index html file
app.get('*', (req, res) => {
let csrfToken = req.csrfToken()
console.log(csrfToken) // This doesnt console log anything on the server side
res.sendFile(path.join(__dirname, "./client/build/index.html"), {
_csrf: csrfToken
})
})
2) 一旦设置了 CSRF 令牌,是否应该将其存储在应用程序的状态(Redux 存储)中以进行持久存储?还是没有必要?
3) 在客户端,当我准备通过 POST 请求将数据提交到路由时,如果我理解正确,您必须将输入隐藏字段与 csrf 变量一起包含,如下所示:
<input type="hidden" name="_csrf" value=csrfToken/>
因此,当您提交表单时,您将包含该输入,然后在发布请求中(假设为 fetch 或 axios),您将设置标头以包含该 csrf 令牌,这样服务器就可以将其与客户端提交给路由的令牌,我理解正确吗?
谢谢!
【问题讨论】:
-
尝试将您的问题编辑为一个有明确答案的问题。您要问的是,React 中 JWT 的“最佳实践”可能取决于业务需求以及其他因素。
-
编辑了我的评论以更好地反映我想要得到的答案。希望有帮助!任何帮助将不胜感激。
-
真棒迈克尔,恰好 React-Redux 是我的专业领域,给我一分钟,我会看看我是否能提供任何帮助。
-
这不是关于我感觉的 JWT 的问题,更多的是关于 CSRF 是如何工作的(这就是 1-3 的内容)。也许从问题中删除对 JWT 的引用?
标签: node.js http express csrf-protection