Ситуация.
Посторонный Web-сервис требует, чтобы SOAP сообщения (запросы)
имели подпись. Подписано должно быть только тело сообщения и эта подпись включена в заголовок.
Шифровать сообщение не надо (только добавить в заголовок подпись тела сообщения).
Мне требуется написать клиента этого Web-сервиса на WCF. Поступил стандартно — сгенерил прокси класс по WSDL.
Но
как сконфигурировать клиента, чтобы удовлетворить требованию подписи тела не знаю.
Порыл в сторону Custom Binding... Порыл в сторону WS-Policy файлов... Зарылся по уши... 8-(
Может я не туда рою?
Вот как примерно должны выгледеть SOAP запросы
<soapenv:Envelope>
<soap:Header>
<ds:Signature>
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#Body">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>aw0bS2ezzC54daKMSeFyzbkbCwg=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>hqyqxii62nVaKFvhH0fWk8uxUxs4qZi0PDVxG2HeIwa8vNsRSmhOwJU/vyN1xhl3jWPvOvJqNSmL kjWeWsFagGQGkTejOh+TSejc0EOTpIQAD5uIiQaBHKWhE8A7n8Yq6KiohVfrH+tlpc3wTt4yENIO jmTT8ecs/e43PQHoEuaSXVpdsnt7yoqchX/uj6Un8y+WovgM173rZ6pO3ssrXILGeoIohVVEDHKk kgsIcVX/joq0HHlySUSh6hZYl0OHoloxIou+9WMAxRp9o/n2rt5co+fZcPpkleQrx51HmZf5imXj wzErxJk8A1CxOg58FROrE/N9ZLDPvwTJ3JFa0Q==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509SubjectName>1.2.840.113549.1.9.1=#160e64616e696c6f7640612d332e7275,CN=Abcd.ru,O=Abcd,L=Moscow,ST=Russia,C=RU</ds:X509SubjectName>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</soap:Header>
<soapenv:Body SOAP-SEC:id="Body">
<web:findAllInvoices/>
</soapenv:Body>
</soapenv:Envelope>