如果我得到一个JWT我可以解码有效负载,这如何安全?难道我不能从标头中获取令牌,解码并更改有效负载中的用户信息,然后使用相同的正确编码秘密将其发送回来吗?
我知道它们必须是安全的,但我真的很想了解这些技术。我缺少什么?
JWT 可以进行签名、加密或两者兼而有之。如果令牌经过签名但未加密,则每个人都可以读取其内容,但当您不知道私钥时,则无法更改它。否则,接收者会注意到签名不再匹配。
回答您的评论:我不确定我是否正确理解您的评论。只是为了确定:您知道并了解数字签名吗?我将仅简要解释一种变体(HMAC,它是对称的,但还有许多其他变体)。
假设 Alice 想向 Bob 发送 JWT。他们都知道一些共同的秘密。马洛里不知道这个秘密,但想干涉和改变智威汤逊。为了防止这种情况发生,爱丽丝计算了Hash(payload + secret)
并将其附加为签名。
当Bob收到消息时,还可以计算Hash(payload + secret)
检查签名是否匹配。
但是,如果 Mallory 更改了内容中的某些内容,她将无法计算匹配的签名(这将是Hash(newContent + secret)
)。她不知道这个秘密,也没有办法找到它。
这意味着如果她更改了某些内容,签名将不再匹配,Bob 将不再接受 JWT。
假设我向另一个人发送消息{"id":1}
并用以下内容签名Hash(content + secret)
。 (+在这里只是连接)。我使用SHA256哈希函数,得到的签名是:330e7b0775561c6e95797d4dd306a150046e239986f0a1373230fda0235bda8c
。现在轮到你了:扮演 Mallory 的角色并尝试签署消息{"id":2}
。你不能,因为你不知道我使用了哪个秘密。如果我假设收件人知道这个秘密,他可以计算任何消息的签名并检查它是否正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)