如何保护webhook身份

问题描述:

我正在开发一项服务,客户可以注册他们的webhook url,我将在注册的url上发送更新。为了安全起见,我希望让客户端(接收方)识别其发送请求的我(服务器)。如何保护webhook身份

FacebookGithub都发送X-Hub-Signature,其中包含以密钥为前缀的有效载荷的散列。

我可以遵循相同的策略。但如果我简单地使用jwt

  1. 在注册webhook时,我与客户端共享密钥。
  2. 然后在每个webhook请求中,我将发送使用相同密钥计算的jwt。

我对密码学知之甚少,但jwt方法似乎更有效,因为我不必一次又一次计算签名,因为我没有在签名中使用有效载荷。

但是为什么facebook和github都遵循另一种方法?

使用MAC(消息认证代码)允许认证消息,如名称所暗示的。发送每封邮件的秘密并不明智,因为这可能会导致秘密被泄露。攻击者可能会拦截其中一条消息,然后开始发布欺骗消息。

您可能要考虑的另一件事是重播攻击。如果攻击者稍后拦截消息并发送相同的消息会怎么样?

编辑:使用JWT是好的,因为它包含MAC,但您必须确保有效负载已通过身份验证(即包含在MAC计算中)。

+0

同意!但关于“发送每封邮件的秘密并不明智,因为这可能会导致秘密被泄密。 ' 我不是普通的秘密。我会发送'jwt'。 –

+0

感谢您指出重播攻击。 –

+1

它看起来像我误解了你的问题的一部分。智威汤逊包含一个MAC。您需要将有效载荷包含在MAC/JWT的计算中,否则攻击者可以使用不同有效负载的MAC。 –