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进行确认。本质上是在问:“嘿,贝宝。您发给我了吗?”
您还能想到其他方法吗?
即使您使用私钥/公钥对对消息进行签名,您也需要实施一些措施来防止重放攻击。
也许更好的方法是通知他们有新东西,然后让他们访问您的服务器来获取新东西。然后他们可以简单地轮询您的服务器并验证您的 SSL 证书。
在向他们发送任何数据之前,您需要先对他们进行身份验证。
对于通知,您只需向他们发布最新通知的签名日期和时间即可。这样,即使重播该通知,他们也会知道,因为时间和日期不会比上一个更新。
| 归档时间: |
|
| 查看次数: |
1976 次 |
| 最近记录: |