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

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

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

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


米脂
浏览 303回答 3
3回答

饮歌长啸

你可以去jwt.io粘贴您的标记并读取内容。一开始,这对很多人来说是令人不快的。简单地说,JWT与加密无关。它关心的是验证。也就是说,它总是可以得到“这个令牌的内容被操纵”的答案吗?这意味着用户对JWT令牌的操作是徒劳的,因为服务器将知道并忽略该令牌。当向客户端发出令牌时,服务器根据有效负载添加签名。稍后,它将验证有效负载和匹配签名。合乎逻辑的问题是,不使用加密内容的动机是什么?最简单的原因是因为它认为这在很大程度上是一个已解决的问题。例如,如果处理像web浏览器这样的客户端,则可以将JWT令牌存储在以下cookie中secure + httpsOnly(Javascript+不能通过HTTP读取)并通过加密通道(HTTPS)与服务器进行对话。一旦您知道您在服务器和客户端之间有了一个安全的通道,您就可以安全地交换JWT或您想要的其他任何东西。这让事情很简单。一个简单的实现使采用更容易,但它也允许每个层做它最好的事情(让HTTPS处理加密)。JWT不是用来存储敏感数据的。一旦服务器接收到JWT令牌并对其进行验证,就可以在自己的数据库中查找用户ID,以获得该用户的其他信息(如权限、邮政地址等)。这使得JWT体积小,避免了无意中的信息泄漏,因为每个人都知道JWT中不保存敏感数据。这和饼干本身的工作原理并没有太大的不同。Cookie通常包含未加密的有效载荷。如果您正在使用HTTPS,那么一切都是好的。如果不是,那么最好自己加密敏感的cookie。不这样做将意味着中间人攻击是可能的-代理服务器或ISP读取cookie,然后在假装是你的时候重放它们。出于类似的原因,应该始终在像HTTPS这样的安全层上交换JWT。

慕桂英3389331

JSON Web令牌(JWT)中的内容本质上并不安全,但是有一个内建特性来验证令牌的真实性。JWT是由句点分隔的三个散列。第三是签名。在公钥/私钥系统中,发行人用只能由其相应的公钥验证的私钥签名令牌签名。理解发行人和验证者之间的区别是很重要的。令牌的接收方负责验证它。在Web应用程序中安全使用JWT有两个关键步骤:1)通过加密的通道发送它们;2)在接收到签名后立即验证签名。公钥密码体制的非对称性使得JWT签名验证成为可能。公钥验证JWT是由其匹配的私钥签名的。没有任何其他组合键可以执行此验证,从而防止模拟尝试。按照这两个步骤,我们可以用数学上的确定性来保证JWT的真实性。更多阅读:公钥如何验证签名?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java