【发布时间】:2017-06-23 20:55:25
【问题描述】:
我相信,要将 Shopify webhook 与 Rails 应用程序(Rails 应用程序needs to disable the default verify_authenticity_token method)集成,并使用 X_SHOPIFY_HMAC_SHA256 标头实现自己的身份验证。 Shopify docs 说只使用request.body.read。所以,我做到了:
def create
verify_webhook(request)
# Send back a 200 OK response
head :ok
end
def verify_webhook(request)
header_hmac = request.headers["HTTP_X_SHOPIFY_HMAC_SHA256"]
digest = OpenSSL::Digest.new("sha256")
request.body.rewind
calculated_hmac = Base64.encode64(OpenSSL::HMAC.digest(digest, SHARED_SECRET, request.body.read)).strip
puts "header hmac: #{header_hmac}"
puts "calculated hmac: #{calculated_hmac}"
puts "Verified:#{ActiveSupport::SecurityUtils.secure_compare(calculated_hmac, header_hmac)}"
end
Shopify webhook 被定向到正确的 URL,并且路由将它提供给上面显示的控制器方法。但是当我发送测试通知时,输出不正确。两个 HMAC 不相等,因此未验证。我相当确定问题在于 Shopify 将整个请求用作身份验证哈希的种子,而不仅仅是 POST 内容。所以,除非我弄错了,否则我需要原始的、未触及的 HTTP 请求。
This 问题经过至少一个小时的搜索,似乎是互联网上唯一有希望的事情。这正是我要问的,它有一个接受的答案,有 30 个赞成票。但他的回答……是荒谬的。它吐出一堆乱七八糟的乱七八糟的东西。我错过了什么明显的东西吗?
此外,this article 似乎暗示我正在寻找的东西是不可能的。似乎 Rails 从来没有收到过纯粹的请求,但它在到达 Rails 之前就被 Rack 分成不同的部分。如果是这样,我想我可能会尝试重新组装它,但我什至必须让标题的顺序正确才能使哈希起作用,所以我无法想象这是可能的。
我想我的主要问题是,我完全搞砸了吗?
【问题讨论】:
标签: ruby-on-rails http http-post shopify webhooks