使用 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'])
对于 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'])