Webhook回调安全性

use*_*426 5 security authentication web-services webhooks

我向客户提供Web服务。我想提供一种功能,在发生某种事件时,我会通过向客户提供的URL发送请求来通知客户。

例如,可以通过GET请求https://customer.example.com/order/12345?status=shipped发送订单发货通知。

客户如何信任此请求是真实的请求?

当客户收到此请求时,他们需要验证该请求确实来自服务,该请求未被篡改并且是私有的。

想到仅通过SSL发送给客户,但是要求客户运行带有签名证书的启用SSL的Web服务器。另外,要验证服务(此请求中的客户端),需要客户端证书。但是,SSL应该处理加密,中间人,消息签名和重播攻击。

服务的IP地址可以更改,因此无需进行身份验证。

PayPal的IPN系统使用了另一种方法。PayPal向客户(在此示例中为商家)发送通知,然后客户通过SSL将有效负载发送回PayPal进行确认。本质上是在问:“嘿,贝宝。您发给我了吗?”

您还能想到其他方法吗?

Mar*_*ams 2

即使您使用私钥/公钥对对消息进行签名,您也需要实施一些措施来防止重放攻击。

也许更好的方法是通知他们有新东西,然后让他们访问您的服务器来获取新东西。然后他们可以简单地轮询您的服务器并验证您的 SSL 证书。

在向他们发送任何数据之前,您需要先对他们进行身份验证。

对于通知,您只需向他们发布最新通知的签名日期和时间即可。这样,即使重播该通知,他们也会知道,因为时间和日期不会比上一个更新。