顧客に Web サービスを提供します。何らかのイベントが発生したときに、顧客が指定した URL にリクエストを送信して顧客に通知する機能を提供したいと考えています。
たとえば、注文の発送の通知は、GET リクエストhttps://customer.example.com/order/12345?status=shippedを介して送信される場合があります。
顧客は、この要求が本物であるとどのように信頼できますか?
お客様がこのリクエストを受け取ったら、そのリクエストが本当にサービスからのものであり、改ざんされておらず、非公開であることを確認する必要があります。
SSL のみを介して顧客に送信することが頭に浮かびますが、顧客は署名付き証明書を使用して SSL 対応の Web サーバーを実行する必要があります。さらに、サービス (この要求のクライアント) を認証するには、クライアント側の証明書が必要です。ただし、SSL は、暗号化、中間者攻撃、メッセージ署名、およびリプレイ攻撃を処理する必要があります。
サービスの IP アドレスは変更される可能性があるため、認証には使用できません。
PayPal の IPN システムでは、別のアプローチが使用されています。PayPal は顧客 (この例ではマーチャント) に通知を送信し、顧客は確認のために SSL 経由でペイロードを PayPal に送り返します。基本的には、「ねえ、PayPal。これを送ってくれましたか?」と尋ねます。
他のアプローチを考えることができますか?