【问题标题】:falsifying a valid JWT Token伪造有效的 JWT 令牌
【发布时间】:2017-02-09 23:09:15
【问题描述】:

成功登录后,我的节点应用程序返回一个 JWT 令牌。

JWT 使用用户 ID、到期日期和密码进行签名。

下面是我如何为 id 为 1 的用户生成令牌:

    return jwt.sign({
        _id: 1,
        exp: exp_date),
    }, "MY_SECRET"); 
    };

由于我的后端应用程序通过它的令牌识别用户:

是否可以让具有“id:1”的用户编辑他的有效令牌,将其设置为“id:2”,然后开始在后端应用程序中鬼混,就好像他是具有“id:2”的用户一样“?

【问题讨论】:

    标签: node.js express jwt express-jwt


    【解决方案1】:

    除非有人可以访问您用来签署 JSON 的私钥

    【讨论】:

      【解决方案2】:

      秘密用于签署有效载荷以供以后验证。请查看 JWT 网站 (https://jwt.io/),它很好地展示了这些概念。

      令牌有效负载未加密,因此每个人都可以读取并可能修改它。通过最初对有效负载进行签名,可以在验证令牌时识别修改。因此,如果有人修改了用户 ID,则有效负载的哈希和会发生变化,并且如果没有您的密钥,就无法重新创建签名。因此,您可以放心,令牌不会在没有识别的情况下被操纵。

      除了使用必须在签名实例和想要验证令牌的实例之间共享的简单密钥之外,还可以使用公钥加密,您使用私钥签名并且令牌有效性可以由不允许自己创建签名令牌的证书进行验证。我建议将这种方法用于分布式设置,因为当其中一个非签名服务受到威胁时,没有机会操纵令牌。

      【讨论】:

        猜你喜欢
        • 2019-03-05
        • 1970-01-01
        • 2021-10-17
        • 2019-01-20
        • 2021-04-13
        • 2019-03-19
        • 2019-10-29
        • 2016-05-07
        • 1970-01-01
        相关资源
        最近更新 更多