据我了解JWT认证,它基本上是这样的:
但是如果攻击者获得了用于生成JWT的秘密的访问权限会怎样?这不像主密码吗?有了秘密和用户ID /用户名,任何人都可以为任何用户发布JWT,并基本上接管任何帐户。由于一小段信息会危及整个系统(而不仅仅是一个用户帐户),这不是一个巨大的缺陷吗?或者我错了?
答案 0 :(得分:2)
如果你参与了所有这些加密的话,我建议你阅读一下Diffie-Hellman密钥交换技术。它允许双方在不知道共同秘密的情况下进行安全对话。它利用PK加密技术,基本上是以下类比:
1)我在一个盒子上放了一个挂锁,然后通过邮寄方式发给你。盒子里面是我想让你知道的一个秘密,在这种情况下是一个会话密钥。 2)您收到包裹并将自己的挂锁放在盒子上,然后通过邮件发回给我。 3)我收到带有两个锁的盒子并取下我自己的锁,只用你的锁就把它发回给你。 4)你再次收到这个盒子,取出你的锁并获取内容:一个除了我以外从未见过的会话密钥。
答案 1 :(得分:1)
您正在描述JWT受对称密钥完整性保护的机制,即在发送方和接收方之间共享的秘密。这只是保护JWT的一种选择,不可否认,它不是最安全的,因为它依赖于可能在两端丢失或被盗的秘密。在发件人无法保密的情况下(例如浏览器内客户端),它也没有用。当存在多个接收器时,它们的可管理性/可扩展性也较差,其中发送器需要为每个接收器管理一个共享密钥。
使用公共/私人密钥对来保护JWT是一个更安全的选择。在这种情况下,JWT将使用仅为发送方所知的私钥进行签名,并且接收方只知道公钥。当然,如果该私钥丢失,它将允许攻击者生成任意JWT并冒充用户,但由于攻击者显然已经可以访问服务器端基础设施,他甚至不需要冒充用户访问服务器端信息。
所以你是对的:由于其安全隐患,受共享秘密保护的JWT通常不太受欢迎,但是使用PKI机制保护它是一种更好的方法。