成功登录后,我的节点应用程序返回一个JWT令牌。
JWT使用用户ID,到期日期和密码进行签名。
以下是为ID为1:
的用户生成令牌的方法 return jwt.sign({
_id: 1,
exp: exp_date),
}, "MY_SECRET");
};
由于我的后端应用程序从其标记中识别用户:
对于具有“id:1”的用户是否可以编辑其有效令牌,将其设置为“id:2”,然后开始在后端应用程序中鬼混,就像他是“id:2”的用户一样“?
答案 0 :(得分:2)
除非有人访问您用于签署JSON
的私钥,否则不会答案 1 :(得分:1)
该秘密用于签署有效负载以供以后验证。请查看JWT网站(https://jwt.io/),该网站很好地展示了这些概念。
令牌有效负载未加密,因此每个人都可以阅读并可能修改它。通过最初对有效负载进行签名,可以识别修改何时对令牌进行验证。因此,如果某人修改了用户ID,则有效负载的哈希值会发生变化而没有您的密钥,就无法重新创建签名。因此,如果没有识别,就无法操纵令牌。
除了使用必须在签名实例和想要验证令牌的实例之间共享的简单秘密之外,还可以使用公钥加密,其中您使用私钥进行签名并且令牌有效性可以由证书验证,该证书不允许自己创建签名令牌。我会建议这种方法用于分布式设置,因为当其中一个非签名服务被泄露时,没有机会操纵令牌。