【问题标题】:Is using JWT Tokens actually a secure way to work around user sessions?使用 JWT 令牌实际上是一种解决用户会话的安全方法吗?
【发布时间】:2020-10-30 21:02:52
【问题描述】:

我正在尝试使用 PRN 堆栈(Postgres、Express、React 和 Node)为客户网站构建注册/登录系统。

我在做一些研究时遇到了 HTTP Cookie 和 JWT 令牌授权(还有很多,但显然这两个是主要的)。

我注意到很多使用 Node JS 的应用程序和教程似乎都在使用 JWT,并将它们存储在 localstorage 中。但我对安全性表示怀疑,因为我觉得开发人员基本上可以进入 localstorage 并获得 JWT 令牌 o

有没有更好的方法来保护使用此堆栈的用户身份验证或使用 localstorage 经验法则?如果是这样,为什么会这样?

感谢您的宝贵时间。

【问题讨论】:

    标签: node.js authentication jwt local-storage


    【解决方案1】:

    限制会话 ID 和 JWT 安全性的一个媒介是网络传输。在这种情况下,两者都只与网络本身一样安全。但最有可能的是,您的应用程序会使用 HTTPS 或 SSL 之类的东西,在这种情况下,通过网络发送的任何数据都是相当安全的。

    关于有人试图在本地存储中嗅探 JWT 的其他极端情况,您可以考虑以下几个选项:

    • 首先,JWT 的本质是它通常是防篡改的。 JWT 内部包含一个 校验和,它是基于 JWT 实际内容的唯一哈希。假设一些恶意用户嗅探了本地存储,然后尝试更改例如JWT 的声明部分。这样做,这也会改变校验和(该用户将无法弄清楚,缺少服务器密钥)。然后,下次将受损的 JWT 发送到服务器时,服务器会拒绝它,因为计算出的校验和与 JWT 中包含的值不匹配。
    • 其次,如果以上被认为不够安全,则可以绕过加密的 JWT。如果您选择此选项,服务器和客户端都会在发送 JWT 之前进行加密/解密,这会增加额外的保护层。

    【讨论】:

      【解决方案2】:

      网络传输的安全性只是网络应用中整体解决方案的一种情况。

      我目前正在研究同一主题,正如您所说,许多教程、博客、youtube 和其他来源都提供了使用 JWT 令牌处理用户数据的绝佳示例。不幸的是,几乎没有人从管理的角度深入处理和处理用户会话——真正的问题从这里开始。

      登录用户并发送 JTW 令牌以响应客户端根本不是问题。当您作为管理员想要使用户无效时,问题就开始了。

      参考以下来源: http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/ Logout/invalidate a JWT

      将会话数据存储在服务器端的会话 cookie 是目前 Web 应用程序的最佳选择。

      【讨论】:

        猜你喜欢
        • 2018-04-17
        • 2014-08-16
        • 2012-01-28
        • 2015-01-08
        • 2020-02-13
        • 2021-09-17
        • 1970-01-01
        • 2020-10-21
        • 2018-11-12
        相关资源
        最近更新 更多