jwt身份验证:cookie vs header

use*_*449 18 javascript security rest jwt web

有很多文章围绕讨论在客户端存储JWT的最佳位置.简而言之,他们都是关于 -

  • 仅限Http的安全cookie - 没有XSS,但对XSRF来说是可以攻克的

  • 标题(保存在本地存储或DOM中) - 没有XSRF,但对XSS来说是可以破坏的

我想我想出了一个非常精明的解决方案,但是,因为我是安全的完全noob,我不确定它是否真的很精明或愚蠢.

那么,如果要拆分JWT并将其中的一部分保存在cookie中以及标题中的另一部分呢?它会牢不可破吗?

这也应该解决'注销'问题 - 删除标题部分会使浏览器无法登录.

最好的问候,尤金.

rob*_*tjd 15

JWT需要保持在一起,否则签名验证将不起作用.

保护XSRF非常简单,您只需要另一个cookie.

永远不要使用本地存储来存储身份验证信息,它不遵循与cookie相同的域和源规则.在这里阅读更多:

https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Storage_APIs

免责声明:我在Stormpath工作,我们有一个托管用户管理解决方案,我们花了很多时间在安全上.我写了两篇博文,讨论JWT和前端身份验证:

基于令牌的单页应用认证(SPA)

https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/

希望这可以帮助!

  • @user656449 CSRF令牌不需要存储。登录期间设置随机 CSRF cookie,并在 JS 中将该值复制到标头中。在服务器端验证 cookie 和标头值是否匹配。它依赖于这样一个事实:只有您自己域上的 JS 才能读取 cookie 值。https://en.wikipedia.org/wiki/Cross-site_request_forgery#Cookie-to-header_token (3认同)