Проверьте хеш сообщения SOAP на стороне WebService - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть веб-сервис SVC на основе SOAP, который вызывает сторонний сервис SOAP. Этот сторонний сервис мыла требует заголовка мыла, который должен включать двоичный токен безопасности и другие вещи безопасности. Я достиг этого, создав расширение мыла и зарегистрировав его в web.config, например

<webServices>
  <soapExtensionTypes>
    <add type="NAMESPACE.SecureMessageSoapExtension, ASSEMBLY" priority="1" group="High" />
  </soapExtensionTypes>
</webServices>

Мой сервис (который на самом деле вызывает стороннюю организацию) также должен принимать мыльный заголовок и всю безопасность от своего клиента.

Я создал клиента и внедрил там такое же расширение мыла. Я вижу, что исходящее сообщение от клиента имеет мыльный заголовок и все необходимые элементы безопасности, такие как токен безопасности, ключи шифрования, канонизация и т. Д.

Теперь проблема в том, что я не могу получить, как проверить запрос на моей стороне обслуживания, потому что вышеупомянутый класс расширения мыла не работает (ProcessMessage не получает удар) в случае входящего запроса на мою службу.

Мой сервис находится в .NET. Это сервис SVC на основе SOAP.

Ниже заголовок мыла, который я получаю от клиента. Мне нужно сначала проверить двоичный токен безопасности (по сравнению с тем, который есть в моей базе данных), а затем дайджест сообщения

<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>

Любая помощь высоко ценится.

Есть ли способ получить доступ к входящему сообщению запроса даже до того, как оно попадет в веб-метод.

...