security - 如何保护 webhook 身份

标签 security cryptography jwt webhooks hmac

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

FacebookGithub两者都发送一个 X-Hub-Signature,其中包含以 key 为前缀的有效负载的哈希值。

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

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

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

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

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

最佳答案

顾名思义,使用 MAC(消息验证码)可以验证消息。在每条消息中都发送一个 secret 是不明智的,因为这很可能导致 secret 被泄露。攻击者可能会拦截其中一条消息,然后开始发出欺骗性消息。

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

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

关于security - 如何保护 webhook 身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716888/

相关文章:

javascript - 在服务器上刷新后刷新 token 本地存储

database - 加密 4 位密码/密码 - 容易破解吗?

c# - 为什么完全使用 C# 类 System.Random 而不是 System.Security.Cryptography.RandomNumberGenerator?

spring - 为什么我们需要在 spring security configure(HttpSecurity http) 方法中调用 http.addFilterBefore() 方法?

java - Google OAuth2 JWT token 验证异常

ssl - 在 SSL 连接中禁用弱密码

php - 如何保护/编码 Javascript POST 请求

javascript - 事件跟踪类似于 Google 事件跟踪

python - Django 1.5 终于不安全了?

go - 如何验证公钥是否与私钥签名匹配?