0

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

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

以下是我为 id: 1 的用户生成令牌的方法:

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

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

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

4

2 回答 2

2

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

于 2016-10-01T13:48:12.663 回答
1

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

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

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

于 2016-10-01T14:02:12.923 回答