Подписать тело SOAP сообщения
От: Рек Россия  
Дата: 20.01.12 07:09
Оценка:
Ситуация.
Посторонный 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>
wcf
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.