条带webhook身份验证 - Ruby

shi*_*vam 8 ruby ruby-on-rails webhooks stripe-payments

我的ruby-on-rails应用程序使用条带进行卡支付.Stripe提供了一些webhooks,通过它可以联系我的应用程序,并提供有关每个事务的详细信息 - 成功或失败.

为此,我在我的控制器中有这样的事情:

class StripeController < ApplicationController
  def webhook
    data_json = JSON.parse request.body.read
    p data_json['data']['object']['customer']
  end
Run Code Online (Sandbox Code Playgroud)

我的问题是如何验证此webhook的真实性?根据我的知识和理解,人们很容易模仿这种情况(中间人攻击).

Sub*_*ial 10

来自Stripe的webhooks文档:

如果担心安全问题,或者确认Stripe发送webhook很重要,您应该只使用webhook中发送的ID,并应直接从Stripe API请求剩余的详细信息.


Sag*_*ani 9

宝石stripe_event以不同的方式覆盖它.

保护您的webhook端点是通过stripe_eventgem中的基本HTTP身份验证完成的.

如果只有Stripe知道基本的身份验证密码,这可以确保请求真正来自Stripe.这是你做的:

  1. 安排在应用程序的环境变量或secrets.yml文件中提供的密钥.

  2. 将StripeEvent配置为要求将该密钥用作基本身份验证密码,使用以下代码:

    StripeEvent.authentication_secret = ENV['STRIPE_WEBHOOK_SECRET']

  3. 在Stripe的设置中指定webhook的URL时,请在URL中包含密码作为密码,以及任何用户名:

    https://stripe:my-secret-key@myapplication.com/my-webhook-path

如果您的webhook端点是通过SSL访问的,那么这只是真正安全的,Stripe强烈建议.


Kir*_*kov 6

您可以basic http authentication通过将webhook设置为以下网址来启用条带化webhook事件

https://username:password@myapplication.com/my-webhook-path
Run Code Online (Sandbox Code Playgroud)

这将导致Authorization标题为

Basic encode64(username:password)
Run Code Online (Sandbox Code Playgroud)

例如通过将webhook设置为以下网址

https://admin:123456@myapplication.com/my-webhook-path
Run Code Online (Sandbox Code Playgroud)

您将在入站请求中获得此标头

Basic YWRtaW46MTIzNDU2
Run Code Online (Sandbox Code Playgroud)