如何保护 webhook 身份

How to secure webhook identity

我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将在已注册的 URL 上发送更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。

Facebook and Github 都发送一个 X-Hub-Signature,其中包含以密钥为前缀的有效载荷的哈希值。

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

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

我不太了解密码学,但 jwt 方法似乎更有效,因为我不必一次又一次地计算签名,因为我没有在签名中使用有效负载。

但为什么 Facebook 和 GitHub 都采用另一种方法?

本网站上的内容可能已过时。如需最准确和最新的内容,请访问

使用 MAC(消息验证代码)可以验证消息,正如名称所暗示的那样。在每条消息中都发送一个秘密是不明智的,因为这很可能导致秘密被泄露。攻击者可能会拦截其中一条消息,然后开始发出欺骗性消息。

您可能要考虑的另一件事是重放攻击。如果攻击者截获一条消息并在稍后发送相同的消息怎么办?

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