【问题标题】:jwt authentication: cookie vs headerjwt 身份验证:cookie 与标头
【发布时间】:2015-09-13 03:42:17
【问题描述】:

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

  • 仅限 Http 的安全 cookie - 无 XSS,但易受 XSRF 攻击

  • 标头(保存在本地存储或 DOM 中)- 无 XSRF,但易受 XSS 攻击

我想我想出了一个非常精明的解决方案,但是,由于我在安全方面完全是菜鸟,我不确定它是真的精明还是愚蠢。

那么,如果将 JWT 拆分,一部分保存在 cookie 中,另一部分保存在 header 中呢?会不会牢不可破?

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

最好的问候,尤金。

【问题讨论】:

    标签: javascript rest security web jwt


    【解决方案1】:

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

    防御 XSRF 非常简单,您只需要另一个 cookie。

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

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

    免责声明:我在Stormpath 工作,我们有一个托管用户管理解决方案,我们在安全方面花费了大量时间。我写了两篇讨论 JWT 和前端身份验证的博客文章:

    Token Based Authentication for Single Page Apps (SPAs)

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

    希望这会有所帮助!

    【讨论】:

    • 但是额外的 cookie 来防止 XSRF 意味着维护服务器端会话,对吗?如果是这样,将 JWT 重新粘合在一起会更简单、更轻量级。再说一次,如果只将 JWT 的一部分存储在本地存储中,它对攻击者有任何价值吗?
    • @user656449 不需要存储 CSRF 令牌。在登录期间设置一个随机的 CSRF cookie,并在 JS 中将值复制到 header 中。在服务器端验证 cookie 和标头值是否匹配。它依赖于只有你自己域上的 JS 才能读取 cookie 值的事实。 en.wikipedia.org/wiki/…
    • 真的很喜欢你的博文。谢谢你写它们!
    猜你喜欢
    • 2018-01-26
    • 2018-09-02
    • 1970-01-01
    • 2020-05-01
    • 2016-04-24
    • 2021-12-24
    • 2011-09-21
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多