我有一个设置为接收来自WooCommerce的网络钩子的Rails应用程序。具体来说,我正在寻找创建订单的时间。我已经测试并验证了它在我protect_from_forgery时是否有效,除了创建。现在我正在尝试通过验证网络钩子来保护我的应用程序。WooCommerce的留档html" target="_blank">声明在请求标头中传递以下秘密:
秘密:一个可选的密钥,用于生成请求正文的HMAC-SHA256哈希,以便接收者可以验证Web钩子的真实性
WooCommerce github文档
目前,我不确定应该如何验证请求,然后再根据请求采取行动。如果请求未经授权,请使用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网络挂钩,我的问题似乎是适当地抓取请求的头文件以将其与我计算的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
我已经在Paypal中使用沙盒成功地实现了webhook集成。现在我想让它更安全,这样只有贝宝签名的通知才被接受。我试图使用 https://developer.paypal.com/docs/api/webhooks/v1/#verify-webhook-signature\u post 但它总是返回失败。 请求是: {"auth_algo":"SHA256with RSA","transmis
我正在使用IBM沃森助手创建一个机器人。我试图使用网络钩子,但不知道发送到网络钩子的POST请求JSON/超文本标记语言的格式。 我的案例研究是一个用户可以预购的商店。我想把订单细节发送到我的后端服务器,并给用户一个预购的参考号码。我在留档中没有发现IBM沃森助手发送的POST请求格式以及应该返回的响应格式。 我知道IBM Watson Assistant不需要特定的响应格式。它允许开发人员根据自
对于错误的响应,是否可能在响应中返回验证注释消息?我认为这是可能的,但我注意到我们的项目没有给出详细的不良请求信息。 如果请求缺少IDField,我希望返回“IDField is required”。我用的是泽西2.0。我看到的回应是...
这是我的视图代码: 和请求验证程序: 发送post请求以创建方法后,它将 SQLSTATE[42S22]:找不到列: 1054未知列'article.title'in'where cluse' SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“article.title”(SQL:选择count(*)作为来自的聚合,其中title=test) 更新 这是我的控制器代码
我需要在爪哇中使用摇摆不定(YAML文件)来验证传入的REST请求。所以任何人都可以帮我这个。提前致谢。
我们的例子中要求用户进行身份验证并且在我们应用程序的每个URL这样做。我们可以通过给http.authorizeRequests()添加多个子节点来指定多个定制需求到我们的URL。例如: protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() //1