Verificar Shopify webhook

Creo que para que un webhook de Shopify se integre con una aplicación Rails, la aplicación Railsnecesita deshabilitar el valor predeterminadoverify_authenticity_token métodoe implementar su propia autenticación utilizandoX_SHOPIFY_HMAC_SHA256 encabezamiento. losDocumentos de Shopify decir que solo userequest.body.read. Entonces, hice eso:

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

El webhook de Shopify se dirige a la URL correcta y la ruta lo proporciona al método del controlador que se muestra arriba. Pero cuando envío una notificación de prueba, la salida no es correcta. Los dos HMAC no son iguales, por lo que no se verifica. Estoy bastante seguro de que el problema es que Shopify está utilizando toda la solicitud como su semilla para el hash de autenticación, no solo el contenido POST. Por lo tanto, necesito la solicitud HTTP original, intacta, a menos que me equivoque.

Esta La pregunta parecía ser lo único prometedor en Internet después de al menos una hora de búsqueda. Era exactamente lo que estaba preguntando y tenía una respuesta aceptada con 30 votos a favor. Pero su respuesta ... es absurda. Escupe un lío ininteligible y confuso de todo tipo de cosas. ¿Me estoy perdiendo algo deslumbrante?

Además,Este artículo Parecía sugerir que lo que estoy buscando no es posible. Parece que Rails nunca recibe la solicitud sin adulterar, pero Rack la divide en partes dispares, antes de que llegue a Rails. Si es así, supongo que tal vez podría intentar volver a ensamblarlo, pero incluso tendría que obtener el orden correcto de los encabezados para que funcione un hash, por lo que no puedo imaginar que eso sea posible.

Supongo que mi pregunta principal es, ¿estoy totalmente jodido?

Respuestas a la pregunta(2)

Su respuesta a la pregunta