【发布时间】:2021-10-10 10:06:46
【问题描述】:
我需要能够验证 webhook 的签名,但我似乎无法正确匹配该值。我使用的工具提供了预期的签名作为请求的 URL 参数:
YOUR_CALLBACK_URL?signature=ofdiwefjojiefwojowefoi
# www.websitename.com?signature=ofdiwefjojiefwojowefoi
他们声明他们生成签名的方式是:
使用此 Webhook 机密,使用 Webhook 帖子的原始 HTTP 正文的 HMAC-SHA-256 base64 摘要生成签名。
你可以在php中生成签名如下:
$request_body = file_get_contents('php://input'); $s = hash_hmac('sha256', $request_body, 'mySecret', true); echo base64_encode($s);
在我的应用中,我尝试通过执行以下操作来生成匹配的签名:
key = ENV['ESIGNGENIE_SECRET']
data = params.to_json
signature = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, data)).strip()
return signature == params["signature"]
这似乎总是错误的。我在这里做错了吗?我不知道我是否因为 Rails 解析 json 对象的方式或其他原因而遇到问题。
【问题讨论】:
-
您是否尝试将两个签名打印出来进行比较,看看 rails 是如何解析它的?
-
是的,我有,但它们不同。
-
更奇怪的是,我最初使用 Hookbin 来捕获 webhook,当我使用 hookbin 中显示的主体并将其转换为字符串并执行完全相同的摘要时,我得到了正确的签名。我不明白区别
标签: ruby-on-rails json webhooks