我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将发送有关已注册 URL 的更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。
Facebook和 Github两者都发送一个 X-Hub-Signature
,其中包含以 key 为前缀的有效负载的哈希值。
我可以遵循同样的策略。但是如果我简单地使用 jwt
会怎样:
- 在注册 webhook 时,我与客户共享一个 key 。
- 然后在每个 webhook 请求中,我将发送一个使用相同 key 计算的 jwt。
我不太了解密码学,但 jwt 方法似乎更有效,因为我不必一次又一次地计算签名,因为我没有在签名中使用有效负载。
但为什么 Facebook 和 GitHub 都采用另一种方法呢?
本网站上的内容可能已过时。如需最准确和最新的内容,请访问
最佳答案
顾名思义,使用 MAC(消息验证码)可以验证消息。在每条消息中都发送一个 secret 是不明智的,因为这很可能导致 secret 被泄露。攻击者可能会拦截其中一条消息,然后开始发出欺骗性消息。
您可能要考虑的另一件事是重放攻击。如果攻击者拦截了一条消息并稍后发送了相同的消息怎么办?
编辑:使用 JWT 很好,因为它包含一个 MAC,但您必须确保有效负载经过身份验证(即包含在 MAC 的计算中)。
关于security - 如何保护 webhook 身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716888/