我为客户提供网络服务。我想提供一个功能,在某些事件中,我会通过向客户提供的 URL 发送请求来通知客户。
例如,订单发货通知可能通过 GET 请求发送https://customer.example.com/order/12345?status=shipped
客户如何相信此请求是真实的?
当客户收到此请求时,他们需要验证该请求是否真的来自服务,它没有被篡改,并且是私有的。
想到只通过 SSL 发送给客户,但需要客户运行带有签名证书的启用 SSL 的 Web 服务器。另外,要对服务(此请求中的客户端)进行身份验证,需要客户端证书。但是,SSL 应该处理加密、中间人、消息签名和重放攻击。
Service 的 IP 地址可以更改,因此对身份验证没有用处。
PayPal 的 IPN 系统使用了另一种方法。PayPal 向客户(本示例中为商家)发送通知,然后客户通过 SSL 将有效负载发送回 PayPal 以进行确认。本质上是问:“嘿,贝宝。你把这个寄给我了吗?”
你能想到其他方法吗?