【问题标题】:Why am I receiving an Error 401 for all Stripe Webhook requests?为什么我收到所有 Stripe Webhook 请求的错误 401?
【发布时间】:2021-09-15 17:55:04
【问题描述】:

我设置了三个站点。我的本地开发 (dev) 环境,一个测试/qa 站点,用于更广泛地验证更改,然后是生产 (prod)。

对于开发人员,开发环境是在 Macbook Pro 和 MAMP Pro 上运行的 Codeigniter 4。在这里测试 Stripe,我正在使用 Stripe 命令行并使用“listen --forward-to”选项进行转发 webhook。这工作得很好。

对于 prod,环境是 Linux 上的 Codeigniter 4,在基于云的虚拟服务器上运行 LAMP 堆栈。我还没有将 Stripe 代码移到 prod,因为它没有经过全面测试/验证。但我怀疑它会很好,因为那里的一切都是可见的并且可供所有网络流量使用。问题在于测试......

为了测试,环境是 Linux 上的 Codeigniter 4,在基于云的虚拟服务器上运行 LAMP 堆栈。为了在我们验证时​​防止窥探(和机器人)测试服务器,我在测试站点所在的根目录中设置了 htaccess 密码。

在 Stripe 中,我为测试服务器 URL 设置了一个 webhook,其中 webhook 代码将被触发。当我尝试从 Stripe 开发人员仪表板发送测试 webhook 事件时,我收到所有事件返回的错误 401。 htaccess 身份验证是否阻止了 webhook 被看到?

如果是这样...我有什么选择?

  • 在测试服务器上安装 Stripe Cmd Line 并将其设置为“listen --forward-to”到正确的 URL?
    • 如果是这样,有没有办法将其设置为后台进程,使其始终运行?出于验证目的,此测试服务器的正常运行时间预期应与我们的 prod 服务器相同。
  • 或者,有没有办法设置 webhook 的身份验证?
  • 其他?

感谢任何指导。

【问题讨论】:

  • 看看这个httpstatuses.com/401
  • @Grumpy -- 是的......我知道状态 401 是什么。我的问题的要点是 htaccess 是否是导致 401 的原因......如果是这样,解决它的正确方法是什么。通过设置另一个持久监听进程或是否可以通过 Stripe 设置身份验证。
  • “htaccess 身份验证是否会阻止 webhook 被看到?” - “看到”是一种奇怪的措辞,但是是的,它当然会回答如果没有通过有效凭据,则请求 401 Forbidden。 “有没有办法设置 webhook 的身份验证?” - 在您配置 webhook 设置的地方检查 stripe,它们是否提供任何方式来提供 HTTP 身份验证凭据。如果他们不这样做 - 那么您将为此特定 URL 创建一个例外,以便 无需 凭据即可访问它。

标签: php stripe-payments webhooks codeigniter-4


【解决方案1】:

正如@CBroe 在上面的评论中提到的那样,是的,基本身份验证是导致 Stripe 出现 401 错误的原因,所有 webhook 调用都对我的测试/验证环境进行了调用。

我做了一些测试,看看我是否可以在测试 URL 上安装和设置条带命令行来监听 webhook 并重定向它们。无论好坏,我的测试和产品 URL 都在同一台服务器上,这使事情变得复杂。

当我设置条带命令行来监听 webhook 调用并重定向它们时,它为 ALL webhook 调用这样做了。包括那些进入 prod 环境的那些。因此,这种方法对我不起作用。

此外,我浏览了 Stripe 文档,似乎没有任何方法或方法可以允许/附加 http(s) 基本身份验证凭据到 webhook 调用。虽然,我认为这将是一个很棒的功能。我已经向 Stripe 发送了一个功能请求……但我怀疑它会被实施,或者我会不会收到他们的回复。

我的最后一个选择是看看是否有办法从一个 URL 中删除 http 身份验证。我希望我一开始就走这条路。这最终成为关键......

这个问题/答案最终使我找到了正确的方法来找到有效的方法。 https://stackoverflow.com/a/41092497/9636533

必须发生一些事情才能使其正常工作...首先,我必须将 apache2.conf 中的 AllowOverride 更改为“All”以用于根 Web 路径。

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

然后我需要删除(或注释掉)我正在使用的 URL/Virtualhost 的 .htaccess 文件中的 Auth 语句。这将被移动到 virtualhost conf 文件中。

#AuthType Basic
#AuthName "Restricted Content"
#AuthUserFile /etc/passwordfile
#Require valid-user

最后,我必须编辑虚拟主机 conf 文件以添加回站点的身份验证详细信息以及 webhook 端点的异常。您需要确保 webhook 端点 URI 与您在 Stripe 仪表板中输入的内容完全匹配。下面是我的目录部分的样子。

        <Directory "/var/www/html/virtualhostpath">
                AuthType Basic
                AuthName "Restricted Content"
                AuthUserFile /etc/passwordfile
                Require valid-user

                # If the request goes to Stripe Webhook: bypass basic auth
                SetEnvIf Request_URI ^/stripe/webhookpath noauth=1
                Allow from env=REDIRECT_noauth
                Allow from env=noauth

                Order Deny,Allow
                Satisfy any
                Deny from all
        </Directory>

我希望这对某人有所帮助...在我尝试所有其他选项之前,我花费的时间比我愿意承认的要多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-09
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多