gpt4 book ai didi

ruby-on-rails - 验证 Webhook 的请求

转载 作者:行者123 更新时间:2023-12-04 06:23:59 26 4
gpt4 key购买 nike

我有一个 Rails 应用程序,它设置为接收来自 WooCommerce 的 webhook。具体来说,我正在寻找创建订单的时间。我已经测试并验证了它在我有protect_from_forgery 时有效,除了create。现在我正在尝试通过验证 webhook 来保护我的应用程序。 WooCommerce 的文档指出请求 header 中传递了以下 secret :

secret: an optional secret key that is used to generate a HMAC-SHA256 hash of the request body so the receiver can verify authenticity of the web hook



WooCommerce github doc

目前我不确定我应该如何验证请求,然后采取行动。如果请求未被授权,则使用 401 拒绝它。这是我正在尝试的:
class HooksController < ApplicationController

protect_from_forgery
before_action :restrict_access

def order_created_callback
...
end

private

SHARED_SECRET = 'my_secret_key'

def verify_webhook(data, hmac_header)
digest = OpenSSL::Digest::Digest.new('sha256')
calculated_hmac = Base64.encode64(OpenSSL::HMAC.digest(digest, SHARED_SECRET, data)).strip
calculated_hmac == hmac_header
end

def restrict_access
data = request.body.read
verified = verify_webhook(data, env["X-WC-Webhook-Signature"])
head :unauthorized unless verified

end
end

但到目前为止,我一直没有成功。任何投入将不胜感激。谢谢。

最佳答案

好的,我发现了我遇到的问题。如果其他人试图使用 WooCommerce 网络 Hook ,我的问题似乎是适本地抓取请求的头文件以将其与我计算的 HMAC 匹配。

SHARED_SECRET = "my_secret"

def verify_webhook(data, hmac_header)
hash = OpenSSL::Digest::Digest.new('sha256')
calculated_hmac = Base64.encode64(OpenSSL::HMAC.digest(hash, SHARED_SECRET, data)).strip
Rack::Utils.secure_compare(calculated_hmac, hmac_header)
end

def restrict_access
data = request.body.read
head = request.headers["X-WC-Webhook-Signature"]
verified = verify_webhook(data, head)
if verified
return
else
render nothing: true, status: :unauthorized
end
end

关于ruby-on-rails - 验证 Webhook 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com