【问题标题】:HTTP Basic Authentication in PayPal Webhook URLsPayPal Webhook URL 中的 HTTP 基本身份验证
【发布时间】:2017-11-29 13:41:24
【问题描述】:

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

PayPal Webhook 是否支持带有 HTTP 基本身份验证凭据的 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

【问题讨论】:

  • 您可能应该阅读文档developer.paypal.com/docs/integration/direct/… 关于如何拨打第一个电话。您需要访问令牌才能将 URL 作为参数或标头传递。在您的情况下,您可以将其放在 URL 中,但您必须先完成所有步骤..获取 clientid 和 clientsecret 并将它们交换为访问令牌,就像文档中的示例一样。之后您可以使用访问令牌发出任何请求
  • 感谢 Rada,并为不清楚的问题道歉。 API 身份验证工作正常。这个问题是关于 API 的不同方面的。我已对问题进行了澄清,并将很快添加答案。

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


【解决方案1】:

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

尝试使用包含 HTTP Basic 凭据的 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 查询字符串中包含一个长而随机的秘密令牌,而不是作为身份验证检查。为此,URL 必须是 HTTPS。当心检查令牌的代码中的时间和长度攻击,简单的== 相等检查容易受到时间攻击。有关时间和长度攻击的更多信息,请参阅 https://github.com/rails/rails/blob/d66e7835bea9505f7003e5038aa19b6ea95ceea1/activesupport/lib/active_support/security_utils.rb#L22

【讨论】:

    【解决方案2】:

    我们知道 PayPal Webhooks 不支持 HTTP Basic 身份验证, 但是对于这类问题,我们有一个解决方案。 我们需要一台实时服务器 [没有 HTTP 基本身份验证],因此我们可以在 paypal 应用程序中为 webhook URL 设置 PHP 文件。

    1. 在实时服务器上创建一个名为 paypalWebhook.php 的 PHP 文件。 下面是这个文件的代码。

      $body = @file_get_contents('php://input');
      
      $url = 'https://foo:secret@example.com/paypal_events';
      
      //open connection
      $ch = curl_init();
      //set the url, number of POST vars, POST data
      curl_setopt($ch,CURLOPT_URL, $url);
      curl_setopt($ch,CURLOPT_POST, count($fields));
      curl_setopt($ch,CURLOPT_POSTFIELDS, $body);
      
      //execute post
      $result = curl_exec($ch);
      
      //close connection
      curl_close($ch);
      
    2. 现在可以像这样设置 Webhook URL:https://{live-server}/paypalWebhook.php

    现在您可以通过实时服务器获取所有发布值给您 devlopment[HTTP Basic authentication server]。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 2011-11-12
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多