在#5、#46 和大多数在线讨论中,人们似乎默认为 JWT 使用本地存储/会话存储,而不是在 cookie 中。 这需要在整个应用程序中使用 AJAX,以便每次都可以从 Web 存储设置标头。 我的理解是,这是为了防止跨站点请求伪造(并且本质上是利用同源策略来做到这一点)。
这如何与渐进式增强相适应,其中一些设备根本不支持 javascript?
_另一个_ _
出于这个微示例的目的,我认为它的“_Ok_”使用localStorage
。
老实说,这些天_每个人_都在使用 React,对可访问性的关注为零。
所有酷孩子_way_对_Shiny New Frameworks_比_Progressive Enhancement_更感兴趣......
然而...
在我们的 _actual_ 应用程序中,我们使用cookies
_precisely_ 来实现向后兼容性和渐进式增强。
这就是我们向 JWT2 添加选项的原因……请参阅: https :
所以总而言之:我会在这个 repo 的例子中添加localStorage
并添加一个comment
通知人们使用 cookie 来存储 JWT 是“_Ohkay_”,因为你仍然可以获得所有 _horizontal 可扩展性_和安全性使用 JWT 的好处,同时节省必须设置/获取 JWT 并将其添加到每个请求的标头的 _effort_...
@rjmk & @nelsonic
存储在本地存储中的 JWTS 是否有特定原因应该在标头中发送,或者使用https://www.npmjs.com/package/node-localstorage是否存在任何易受攻击的/“错误”
@Jbarget您localStorage
? 如果这是您的用例,那么node-localstorage
模块将满足您的目的。
_但是_您仍然必须_手动_在header
中发送 JWT 以将其发送回“AJAX”请求中的服务器......是从localStorage
获取/设置令牌...
@nelsonic我们可能最终会在每个请求的标头中设置它,感谢您的清晰!
@Jbarget你有 _objection_ 将 JWT 存储在 cookie 中吗? (_它简化了你的生活..._)
@nelsonic不反对,我是否认为它可以从应用程序中的任何位置访问 cookie 而不是本地/会话存储,从而简化了我的生活?
它简化了您的应用程序,因为一旦 cookie 由服务器 _set_,发送/接收的 _all_ 请求将始终包含 cookie。 这意味着你_永远_需要_思考_在那之后。
相比之下,将 JWT 存储在localStorage
意味着您不能进行非 ajax 交互,并且您必须记住SET
为您向服务器发出的每个请求的auth
标头。 .
不一定,但这取决于您的工具集。 例如,Angular 允许您设置一次。我认为您甚至可以轻松地使用 jquery。
$.ajaxSetup({
headers: { 'x-my-custom-header': 'some value' }
});
将 cookie 作为令牌传输层的另一个问题是您使用了 2 个超时,并且您没有获得避免 CORS 问题的好处。 Cookie 使访问 RESTful Web 服务变得复杂。 与捆绑在 cookie 中相比,构造 curl one liner 以使用令牌访问资源要容易得多。
这是问题已自动关闭,因为它已经超过一年了。 如果它仍然与您的项目相关,请随时重新打开它。
最有用的评论
不一定,但这取决于您的工具集。 例如,Angular 允许您设置一次。我认为您甚至可以轻松地使用 jquery。
将 cookie 作为令牌传输层的另一个问题是您使用了 2 个超时,并且您没有获得避免 CORS 问题的好处。 Cookie 使访问 RESTful Web 服务变得复杂。 与捆绑在 cookie 中相比,构造 curl one liner 以使用令牌访问资源要容易得多。