【发布时间】:2019-02-21 08:03:09
【问题描述】:
我正在尝试在 cookie 中实现 jwt 以在单页面应用程序反应前端进行身份验证,该前端与运行 express 的各种节点微服务通信。
我这样做是因为将 jwt 存储在 sessionStorage 中会使应用容易受到 XSS 的攻击。
但是,通过使用 cookie,api 现在容易受到 csrf 攻击。
传统上,通过创建一个 csrf 令牌,将其存储在服务器会话中,然后将其呈现在隐藏的表单字段中来缓解 csrf 攻击。 然后,在提交表单时,会根据服务器会话值检查 csrf 令牌的值以检查它们是否匹配。
我不能将这种方法用作: - 服务器是无状态的 - 没有服务器端渲染。
所以我对应该采用哪种 csrf 方法感到困惑。 我已经阅读过双重提交方法,您在每个 ajax 请求上提交一个 csrf 令牌,并将相同的值存储在 cookie 中,然后服务器检查两者是否匹配。
但是,由于没有服务器端渲染,我无法将初始 csrf 令牌放入 html。
在没有服务器端渲染的无状态架构中,在具有 csrf 保护的 cookie 中实现 jwt 的最佳实践是什么?
【问题讨论】:
-
你是如何设置cookies的?大概您的一个微服务具有允许用户登录的身份验证端点?
-
使用 auth0,用户在他们网站上托管的登录页面上登录,有一个回调 url 他们被重定向到 url 参数中的令牌,目前存储在 localstorage 中。我不确定如何让它与 cookie 一起使用,我考虑使用令牌向服务器端点发布请求,然后返回 httponly cookie,但这对我来说似乎有点不安全。
标签: node.js reactjs cookies jwt csrf