使用 webhook 秘密的要点

the point of using a webhook secret

对于 heroku 应用程序,我有一个用于 "api:release" 的 webhook。

即使我为 webhook 设置了秘密,我的 webhook 应用程序仍然会收到该挂钩。

那么设置可选密钥的意义何在?

任何人都可以点击您的 webhook 并触发您的构建,因为它是一个没有身份验证的 HTTP 端点。为了防止 scripts/abusers 开始大量构建,可以使用秘密。

当接收到 webhook 时,发件人必须包含一个令牌,可以通过将其与机密进行比较来验证此令牌。如果令牌匹配,则假设有效客户端发送它是相同的。如果令牌与 uo 不匹配,您可以忽略该请求,从而防止从不受信任的源启动的不必要的构建。

有关设置机密的更多详细信息:https://devcenter.heroku.com/articles/app-webhooks#step-3-subscribe

要比较校验和,您可以使用以下代码段:

crypto.createHmac('sha256', '12345').update(Buffer.from(req.rawBody)).digest('base64');

并将其与 Heroku-Webhook-Hmac-SHA256 header 值进行比较。

对于 ruby 使用 rack 的用户,您将执行类似

的操作
OpenSSL::HMAC.digest('SHA256', key, body) == Base64.decode64(request.env['Heroku-Webhook-Hmac-SHA256'])