【发布时间】:2020-07-03 02:24:47
【问题描述】:
我一直在尝试为 Next.js 项目实施可靠的身份验证流程,但我现在完全迷失了。我已经看过 Next.js 的示例 repo。但是对于完整的解决方案,我有很多问题。
我有一个 express.js API 和一个单独的 Next.js 前端项目。所有数据和身份验证均由 API 处理。前端只是用 SSR 渲染页面。如果我只是创建一个单体项目,其中呈现页面和所有数据由单个服务器处理(我的意思是 Next.js 使用自定义服务器选项),我只会使用 express-session 和 csurf。这将是管理会话和针对 CSRF 创建安全性的传统方式。
Express.js API 不是必需的。这只是一个例子。它可以是 Django API 或 .Net Core API。重点是,它是一个单独的服务器和一个单独的项目。
我怎样才能拥有一个简单但可靠的结构?我检查了一些我最喜欢的网站(netlify、zeit.co、heroku、spectrum.chat 等)。其中一些使用本地存储来存储访问和刷新令牌(XSS 易受攻击)。其中一些使用 cookie,甚至不是 HTTPOnly(XSS 和 CSRF 都易受攻击)。而像spectrum.chat这样的例子使用我上面提到的方式(cookie-session +防止csrf)。
我知道围绕 JWT 代币进行了巨大的炒作。但我觉得它们太复杂了。大多数教程只是跳过了所有的过期、令牌刷新、令牌撤销、黑名单、白名单等。
Next.js 的许多会话 cookie 示例几乎从未提及 CSRF。老实说,身份验证对我来说一直是个大问题。一天我读到应该使用 HTTPOnly cookie,第二天我看到一个巨大的流行网站甚至没有使用它们。或者他们说“永远不要将你的代币存储到 localStorage”,然后一些大型项目就使用这种方法。
谁能告诉我这种情况的方向?
【问题讨论】:
-
JWT 实际上相当简单。如果你愿意,我可以发送我的例子吗?
-
这可能会有所帮助。 JWT 可以用于很多事情,但是当人们只是创建一个令牌、在 x 小时内过期并且甚至不显示他们如何刷新它等等时,我就是不明白。
标签: reactjs authentication session csrf next.js