为了账号安全,请及时绑定邮箱和手机立即绑定

如果你能解码JWT,它们是如何安全的?

/ 猿问

如果你能解码JWT,它们是如何安全的?

holdtom 2019-07-16 15:12:00

如果你能解码JWT,它们是如何安全的?

我爱JWT。和他一起工作真的很有趣。我的问题是:如果我得到一个JWT,并且能够解码有效载荷,这有多安全?我就不能从报头中获取令牌,解码并更改有效负载中的用户信息,并将其用相同的正确编码秘密发送回来吗?

我知道它们必须是安全的,但我真的很想了解这些技术。我遗漏了什么?谢谢!


查看完整描述

3 回答

?
慕瓜9086354

JWT既可以签名,也可以加密,也可以两者兼而有之。如果令牌被签名,但没有加密,每个人都可以读取令牌的内容,但是当您不知道私钥时,就不能更改它。否则,接收方会注意到签名不再匹配。

回答你的评论:我不确定我是否理解你的评论正确的方式。确定一下:你知道并理解数字签名吗?我将简要解释一个变体(HMAC,它是对称的,但还有许多其他)。

假设Alice想向Bob发送一个JWT。他们都知道一些共同的秘密。马洛里不知道这个秘密,但想要干涉和改变JWT。为了防止这种情况,爱丽丝计算出Hash(payload + secret)并将其附加为签名。

当收到消息时,Bob还可以计算Hash(payload + secret)若要检查签名是否匹配,请执行以下操作。但是,如果Mallory更改了内容中的某些内容,她就无法计算匹配的签名(这将是Hash(newContent + secret))。她不知道这个秘密,也找不到答案。这意味着如果她更改了什么,签名将不再匹配,Bob将不再接受JWT。

让我们假设,我给另一个人发信息{"id":1}然后用Hash(content + secret)..(+只是连接在这里)。我使用SHA 256哈希函数,得到的签名是:330e7b0775561c6e95797d4dd306a150046e239986f0a1373230fda0235bda8c..现在轮到你了:扮演马洛里的角色,试着签个字{"id":2}..你不能因为你不知道我用了哪个秘密。如果我假设收件人知道这个秘密,他可以计算出任何消息的签名,并检查它是否正确。


查看完整回答
反对 回复 2019-07-16
?
天涯尽头无女友

JSON Web令牌(JWT)中的内容本质上并不安全,但是有一个内建特性来验证令牌的真实性。JWT是由句点分隔的三个散列。第三是签名。在公钥/私钥系统中,发行人用只能由其相应的公钥验证的私钥签名令牌签名。

理解发行人和验证者之间的区别是很重要的。令牌的接收方负责验证它。

在Web应用程序中安全使用JWT有两个关键步骤:1)通过加密的通道发送它们;2)在接收到签名后立即验证签名。公钥密码体制的非对称性使得JWT签名验证成为可能。公钥验证JWT是由其匹配的私钥签名的。没有任何其他组合键可以执行此验证,从而防止模拟尝试。按照这两个步骤,我们可以用数学上的确定性来保证JWT的真实性。

更多阅读:公钥如何验证签名?


查看完整回答
反对 回复 2019-07-16
  • 3 回答
  • 0 关注
  • 812 浏览
我要回答
慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信