ruby - PayPal Webhook URL 中的 HTTP 基本身份验证

标签 ruby paypal paypal-rest-sdk basic-authentication

(补充:对于这个问题,假设 PayPal API 上的操作正常运行并经过身份验证。)

PayPal Webhooks 是否支持带有 HTTP Basic 身份验证凭据的 URL,因此以下内容将创建一个使用给定凭据 foo:secret 的有效 webhook?

webhook_attrs = {
  # NOTE the URL has HTTP Basic credentials of
  # user is 'foo' and password is 'secret':
  url: 'https://foo:secret@example.com/paypal_events',
  event_types: [
      { name: 'PAYMENT.AUTHORIZATION.CREATED' },
      { name: 'PAYMENT.AUTHORIZATION.VOIDED' }
  ]
}
webhook = PayPal::SDK::REST::Webhook.new(webhook_attrs)
if webhook.create && webhook.error.nil?
  p "Created webhook:", webhook
else
  p "Failed to create webhook:", webhook.error, webhook
end

最佳答案

PayPal Webhooks 不支持 HTTP 基本身份验证(在撰写本文时)。

尝试使用包含 HTTP 基本凭据的 URL 创建 Webhook 将失败并出现以下错误:

{
  "name" => "VALIDATION_ERROR",
  "details" => [ { "field" => "url", "issue" => "Not a valid webhook URL" } ], 
  "message" => "Invalid data provided",
  "information_link" => "https://developer.paypal.com/docs/api/webhooks/#errors"
}

对于希望这样做的开发者,有几点建议:

  1. 请 PayPal 支持(可能值得一提的是 Stripe Webhooks 支持 HTTP 基本身份验证)
  2. 作为解决方法,请考虑在 URL 查询字符串中包含一个长而随机的 secret token ,而不是作为身份验证检查。为此,URL 必须是 HTTPS。当心检查 token 的代码中的时间和长度攻击,一个简单的 == 相等性检查很容易受到时间攻击。参见 https://github.com/rails/rails/blob/d66e7835bea9505f7003e5038aa19b6ea95ceea1/activesupport/lib/active_support/security_utils.rb#L22有关时间和长度攻击的更多信息。

关于ruby - PayPal Webhook URL 中的 HTTP 基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44764407/

相关文章:

Ruby 引号,为什么我将此 CSV 保存到文件时会看到三重双引号?

mysql - 异常的 ActiveRecord 行为

php - 交易id无效 10609

Paypal 沙盒显示不正确的电子邮件

android - 跨平台移动订阅(Android + iOS)

ios - 如何从 Braintree iOs SDK 获取随机数

c# - 将 Ruby 转换为 C#

c++ - $stdin 与 std::istream 的兼容性,使用 swig、C++ 和 Ruby

paypal - 通过银行进行 PayPal 付款的选项

PayPal Checkout(智能支付按钮)——使用自己的按钮