【发布时间】:2021-12-24 22:22:10
【问题描述】:
首先让我先说,这不是客户端令牌与服务器端会话引用的问题。我了解其中的差异,并且我已经决定采用无会话实施。
我还决定将 cookie 用于客户端持久性和传输,而不是 localStorage、查询参数、身份验证标头等。
好的,除此之外,我正在寻找两种替代方法来将用户 ID 保存在客户端上。两者都通过签署数据来防止篡改。
Express 有一个启用签名 cookie 的中间件,或者我可以使用 JWT 也对数据进行签名(我仍然会通过 cookie 发送)。
到目前为止,我的想法是使用签名的 cookie,它的处理开销更少,并且做特定的事情,我不一定需要嵌套 json 格式的数据。此外,我仅将它用于对我的网络服务器上的用户进行身份验证,而不是用于 API 或其他授权。我不需要公/私非对称密钥验证。
JWT 是很好的标准,我已经将它用于 OAUTH,但对于我的网站身份验证,我不需要其中的一些好处。例如,我不需要它来实现可转移性。我不会有不同的 sig 算法或令牌类型。
不过,我确实很欣赏 JWT 是公认的标准,并且有很多支持/文档。
关于为什么我应该选择使用 JWT 进行网站授权和客户识别,我是否遗漏了什么?
顺便说一句,我在发布问题之前已经对此进行了研究。这是一个非常相似的,JWT vs cookies for token-based authentication
但是,由于某些原因,投票最多的答案并不适用。主要是,我已经决定是否将 cookie 用于 JWT。我将使用带有 sameSite 等选项的 cookie 来防止 CSRF 攻击,以及:expires、secure、httpOnly 和 signed(这是特别要表达的)。
【问题讨论】:
标签: express authentication jwt cookie-session