小编Mik*_*ter的帖子

验证 Webhook 的请求

我有一个 Rails 应用程序,它设置为从 WooCommerce 接收 webhook。具体来说,我正在寻找创建订单的时间。我已经测试并验证了当我有protect_from_forgery 时它可以工作,但create 除外。现在我试图通过验证 webhook 来保护我的应用程序。WooCommerce 的文档说明在请求标头中传递了以下秘密:

秘密:一个可选的秘密密钥,用于生成请求正文的 HMAC-SHA256 哈希,以便接收者可以验证网络钩子的真实性

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
Run Code Online (Sandbox Code Playgroud)

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

wordpress ruby-on-rails webhooks

4
推荐指数
1
解决办法
2323
查看次数

标签 统计

ruby-on-rails ×1

webhooks ×1

wordpress ×1