【问题标题】:Stripe webhook authentication - RubyStripe webhook 身份验证 - Ruby
【发布时间】:2014-03-16 11:12:54
【问题描述】:

我的 ruby​​-on-rails 应用程序使用条带进行卡支付。 Stripe 提供了一个 webhook,它通过它联系回我的应用程序并提供有关每笔交易的详细信息 - 成功或失败。

为此,我的控制器中有这样的东西:

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

我的问题是如何验证这个 webhook 的真实性?据我所知和理解,人们可以很容易地模仿这一点(中间人攻击)。

【问题讨论】:

    标签: ruby-on-rails ruby stripe-payments webhooks


    【解决方案1】:

    来自 Stripe 的webhooks documentation

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

    【讨论】:

      【解决方案2】:

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

      Securing your webhook endpoint 是通过 stripe_event gem 中的基本 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

      只有通过 SSL 访问您的 webhook 端点才真正安全,Stripe 还是强烈建议这样做。

      【讨论】:

        【解决方案3】:

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

        https://username:password@myapplication.com/my-webhook-path
        

        这将产生一个Authorization 标头,其值为

        Basic encode64(username:password)
        

        例如通过将 webhook 设置为以下 url

        https://admin:123456@myapplication.com/my-webhook-path
        

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

        Basic YWRtaW46MTIzNDU2
        

        【讨论】:

          猜你喜欢
          • 2021-01-14
          • 2022-06-28
          • 2019-08-10
          • 1970-01-01
          • 2019-04-03
          • 2023-02-09
          • 1970-01-01
          • 2014-01-11
          • 2020-09-11
          相关资源
          最近更新 更多