2014-02-17 76 views
6

我的ruby-on-rails應用程序使用條紋卡支付。 Stripe提供了webhooks,通過它與我的應用程序聯繫並提供有關每個事務的詳細信息 - 成功或失敗。條紋webhook身份驗證 - 紅寶石

對於這一點,我有我的控制器是這樣的:

class StripeController < ApplicationController 
    def webhook 
    data_json = JSON.parse request.body.read 
    p data_json['data']['object']['customer'] 
    end 

我的問題是我如何可以驗證該網絡掛接的真實性?據我所知,人們可以很容易地模仿這種(中間人攻擊)。

回答

9

從條紋的webhooks documentation

如果擔心安全問題,或者如果它確認條紋發送網絡掛接是很重要的,你應該只使用ID在你的網絡掛接發送,並應要求從剩餘的細節直接條帶API。

8

寶石stripe_event它有不同的方式。

Securing your webhook endpoint是通過stripe_event寶石中的基本HTTP驗證完成的。

如果只有Stripe知道基本認證密碼,這確保請求確實來自Stripe。以下是您的操作:

  1. 安排一個密鑰在您的應用程序的環境變量或secrets.yml文件中可用。

  2. 配置StripeEvent,要求祕密被用作基本的身份驗證密碼,利用沿線代碼:

    StripeEvent.authentication_secret = ENV['STRIPE_WEBHOOK_SECRET']

  3. 當你指定條紋的設置你的網絡掛接的網址,包括祕密的密碼的URL,與任何用戶名的:

    https://stripe:[email protected]/my-webhook-path

如果您的webhook端點是通過SSL訪問的,則這只是真正安全的,無論如何Stripe強烈建議。

1

您可以通過網絡掛接設置到以下網址

https://username:[email protected]/my-webhook-path 

這將導致Authorization頭與設置的

Basic encode64(username:password) 

例如值使basic http authentication爲條紋網絡掛接事件webhook到以下url

https://admin:[email protected]/my-webhook-path 

您將在入站請求中獲得此標頭

Basic YWRtaW46MTIzNDU2