У меня есть приложение Rails, которое настроено на получение webhook от WooCommerce. В частности, я ищу, когда создается заказ. Я проверил и проверил, что он работает, когда у меня есть защита_from_forgery, кроме create. Теперь я пытаюсь защитить свое приложение, проверив webhook. Документация WooCommerce гласит следующее секрета передается в заголовке запроса:Проверка запроса Webhook
секрет: дополнительный секретный ключ, который используется для создания HMAC-SHA256 хэша тела запроса, так что получатель может проверить подлинность веб-крюк
в данный момент я не знаю, как я полагаю, чтобы проверить запрос, а затем действовать по нему. И если запрос не имеет права отклонить его с 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
Но до сих пор я не увенчались успехом. Любой вход был бы весьма признателен. Благодарю.
Я не могу предложить решение, но то, что вы делаете, кажется совершенно нормальным. В большинстве случаев у меня есть эта проблема, это что-то немое, как странная новая строка, но я вижу, что вы вызываете «strip» в конце. –