在WebService端验证SOAP消息哈希

时间:2018-11-16 10:33:14

标签: .net web-services wcf soap soap-extension

我有一个基于SOAP的SVC Web服务,该服务调用了第三方SOAP服务。此第三方肥皂服务需要一个肥皂标头,其中应包括二进制安全性令牌和其他安全性内容。我是通过创建一个肥皂扩展并将其注册在

之类的web.config中来实现的
<webServices>
  <soapExtensionTypes>
    <add type="NAMESPACE.SecureMessageSoapExtension, ASSEMBLY" priority="1" group="High" />
  </soapExtensionTypes>
</webServices>

我的服务(实际上叫第三方)也应该接受soap标头和来自其客户端的所有安全性。

我创建了一个客户端,并在那里实现了相同的soap扩展。我可以看到,来自客户端的传出消息具有soap标头和所有必需的安全元素,例如安全令牌,加密密钥,规范化等

现在,问题是我无法获得如何在服务端验证请求的方法,因为在向我的服务传入请求的情况下,上述肥皂扩展类不起作用(ProcessMessage未被命中)。 / p>

我的服务在.NET中。它是基于SOAP的SVC服务。

下面是我从客户端获得的Soap标头。我需要首先验证Binary安全令牌(相对于数据库中的令牌),然后验证消息摘要

<soap:Header>
<wsse:Security mustUnderstand="1">
    <wsse:BinarySecurityToken wsu:Id="X509-c8ea63fd-906f-42a2-88e7-095077351376" ValueType="http://www.SOMETHING.com#CustomToken" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">ACHWZlOWSVdW8pi9NZFBoCdfhuxkEhCg7V7BuAx5O_64kUwmqXJ8mcSDJiVroGmf-pm1teKhRYIaNnIfZzk58tWM0mzHhcT8PEeuSP676hW7FjVHrcBybxfhQpFwOHonSNSMYhbq7kEzliXBt9m86EKcyOSY3HT5yPxOH-jMf6kRDQqXsHUQEVcbwP8AFsKtV-sDNdg3LBPkAcHB3irqPvl2sw7R8hicsZXM4sOwE7E</wsse:BinarySecurityToken>
    <Signature Id="SIG-7726920b-33e6-4bc8-bc1a-cebf6d3760dd" xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                <InclusiveNamespaces PrefixList="soap" xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" />
            </CanonicalizationMethod>
            <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
            <Reference URI="#id-9df3dad9-08cb-4771-aad6-536e8d547a8d">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
                <DigestValue>SWTDSonxPz1RDpQ9pd0pOffR/paQDIDRV3CaoND0ZO4=</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>JPZrvt8wfDbKQhPSVsxPzxHGjM/a7vpD+sySxW/egK0BHLvxKmDm2zMztE/okInL1DfA0jSjqou5qsXPJek0W5TglzUqN4Kgmgt6Zmg/C78jMvOb5BUmGkm26Af2dfZ7g/kAJ3sRaGXTPEAuliH0KDoA2SvXWm0YghmPE0Tf3Mh3DBszFCwhHUtr8QbBHCu7Jjr46PiqD72wMBAvIS1tgbJgeb2U87Y/UpDxe7xIEjQt09N/w0RsAVaOKERxPvqUIBeIGz0G6CvXBgbgRgTMEdgGXGWDMohsD09ydMiWq9lAludJy8ru3lLP1aF+CPGHFCT7qgU4pqKn6TxrnGjCUQ==</SignatureValue>
        <KeyInfo Id="KI-c055e297-0d9c-4104-a56b-caa2a918967c">
            <wsse:SecurityTokenReference wsu:Id="STR-a8321c11-302f-4447-b9d5-554ea954546d">
                <wsse:Reference URI="#X509-c8ea63fd-906f-42a2-88e7-095077351376" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" />
            </wsse:SecurityTokenReference>
        </KeyInfo>
    </Signature>
</wsse:Security>

我们非常感谢您的帮助。

是否有一种方法甚至可以在进入Web方法之前访问传入的请求消息。

0 个答案:

没有答案