使用WCF(或其他.NET内容)签署SOAP请求

时间:2017-07-13 12:25:34

标签: c# wcf soap

我需要通过HTTPS使用SOAP with XML Signature(xmldsig)与一些外部Web服务进行交谈。

WCF似乎是使用.NET / C#实现它的实际方法。我试了一些(很多)东西,但没有成功。签名与远程服务器等待的签名不完全相同,我总是收到无效的签名消息(没有更多信息)。

我有一个SoapUI的“项目”,让我看看需要什么。但我无法与WCF完全相同。我想我需要使用自定义绑定,但它真的不明显,而且我是一个专家的WCF新手。

来自这样的信息:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:axw="http://www.axway.com">
<soapenv:Header/>
<soapenv:Body>
    <axw:ws_liste_adherents>
        <axw:adherent>XXXXX</axw:adherent>
    </axw:ws_liste_adherents>
</soapenv:Body>
</soapenv:Envelope>

使用给定的证书(+密码),我必须构建这样的消息(我用XXXXX替换了一些内容):

<soapenv:Envelope xmlns:axw="http://www.axway.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

<soapenv:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <ds:Signature Id="SIG-797BAE4CD3371CB59B14999468343185" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                <ec:InclusiveNamespaces PrefixList="axw soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:CanonicalizationMethod>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
            <ds:Reference URI="#id-797BAE4CD3371CB59B14999468343164">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                        <ec:InclusiveNamespaces PrefixList="axw" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                    </ds:Transform>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                <ds:DigestValue>RCb3MTzUAr9dwAlG2ossgryTrTI=</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>

        <ds:SignatureValue>NhTdqGTLFdgoXbwehGnWeX+zbz5GDAd2cjT39/5acDstEMjdUt5U4zzc7wsAaHf0skH+M5/yFLF8
        T11aHhCZWaN/RDNg7kP47lvovMFeOwjYx2zs4LLFedAXcKtI7LjQtvA90r2zqYe4JykuD1LbOHjy
        CCiU7ZrPGAsOB4rIyvz3gV3WfWR+MMpjgw6FsZ1ZujSOk4ezNPZk9R0wjm4MPbIHG+hUzQol6J4v
        LYkZQKoMIPDOnz6cYf0RFTnZRBL8cf/Brq5NiN946145yj/+ElYjRzYQvo3Vex4EdZM5S4Rpk1vv
        t+OyKkv5CbBcvrewdlYY/QdtsSakHo5OXcGbcA==</ds:SignatureValue>

        <ds:KeyInfo Id="KI-797BAE4CD3371CB59B14999468343112">
            <wsse:SecurityTokenReference wsu:Id="STR-797BAE4CD3371CB59B14999468343133">
                <wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">XXXXXXXXXXXXXXXXXXXXX==</wsse:KeyIdentifier>
            </wsse:SecurityTokenReference>
        </ds:KeyInfo>

        </ds:Signature>
    </wsse:Security>
</soapenv:Header>

<soapenv:Body wsu:Id="id-797BAE4CD3371CB59B14999468343164" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <axw:ws_liste_adherents>
        <axw:adherent>XXXX</axw:adherent>
    </axw:ws_liste_adherents>
</soapenv:Body>

</soapenv:Envelope>

WCF真的是正确的工具吗?是以正确的方式使用自定义绑定吗?

一些帮助将受到欢迎,因为我现在总是被困住。

感谢。

0 个答案:

没有答案