伪造有效的 JWT 令牌

falsifying a valid JWT Token

成功登录后,我的节点应用程序 returns JWT 令牌。

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

以下是我如何为 ID 为 1 的用户生成令牌:

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

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

"id:1" 的用户是否可以编辑他的有效令牌,将其设置为 "id:2",然后开始在后端应用程序中四处游荡,就好像他是 [= 的用户一样22=] ?

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

的私钥

密钥用于对负载进行签名以供以后验证。请查看 JWT 网站 (https://jwt.io/),它很好地展示了这些概念。

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

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