当攻击者获得用于生成JWT的秘密时会发生什么?

据我所知,JWT身份validation基本上是这样工作的:

  • 用户将login凭据发送到服务器
  • 如果login凭证是正确的,则服务器发出一个包含用户标识和用户名的JWT(或任何你想在有效载荷中标识用户的)
  • 此JWT是使用应用程序范围的秘密生成的,应该将其存储在环境variables中
  • JWT由用户存储,例如存储在localStorage中,并在每个请求中向服务器发送报头
  • 来自auth头文件的JWT使用应用程序范围的秘密进行validation。 如果validation成功,我们知道谁发送了请求,以及请求是否被授权。

但是如果攻击者能够访问用于生成智威汤逊的秘密,会发生什么? 是不是像主密码? 随着秘密和用户的ID /用户名,任何人都可以为任何用户发布JWT,并基本上接pipe任何帐户。 这不是一个巨大的缺陷,因为一小块信息会危及整个系统(而不仅仅是一个用户帐户)? 还是我误会了?

如果你join了所有这些encryption的东西,我build议你阅读Diffie-Hellman密钥交换技术。 它允许双方进行安全对话,而不必先知道一个共同的秘密。 它利用PK密码学,基本上是以下类比:

1)我把一个挂锁放在一个盒子里,然后邮寄给你。 盒子里面有一个秘密,我想让你知道,在这种情况下,会话密钥。 2)您收到包裹并将自己的挂锁放在箱子上,通过邮件发回给我。 3)我收到带有两个锁的盒子,并取出自己的锁,只有锁上的锁才将其发回给你。 4)你再次收到盒子,取出你的锁,并获得内容:一个会议密钥,除了我以外从来没有见过任何人。

您正在描述一个JWT完全由对称密钥保护的机制,即发送者和接收者之间共享的秘密。 这只是保护智威汤逊的一种select,不可否认它并不是最安全的select,因为它依赖于可能在两端丢失或被盗的秘密。 在发送者不能保密的情况下,如浏览器内的客户端也是没有用的。 当发送者需要pipe理每个接收者的一个共享密钥的多个接收者时,它也是较lesspipe理/可扩展的。

使用公共/私人密钥对来保护智威汤逊有更安全的select。 在这种情况下,智威汤逊将使用仅由发送方已知的私钥进行签名,并且只有公钥被接收方所知。 当然,如果这个私钥丢失了,攻击者就可以生成任意的JWT并模拟用户,但是由于攻击者显然已经可以访问服务器端的基础设施,所以他甚至不需要模拟用户访问服务器端信息。

所以你是对的:受共享秘密保护的JWT往往不太受欢迎,因为它具有安全性,但是有一个更好的方法来使用PKI机制来保护它。