Как правило, подпись SOAP помещается в тело как одно из полей сущности, а не в заголовок? - PullRequest
0 голосов
/ 29 апреля 2020

В предисловии я новичок в работе с SOAP веб-сервисами. Я пытаюсь вызвать существующий WS, и в качестве примера правильного вызова они показывают:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aut="http://www.epaslaugos.lt/services/authentication" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
    <soapenv:Header/>
    <soapenv:Body>
        <authentication:authenticationRequest xmlns:authentication="http://www.epaslaugos.lt/services/authentication" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://www.w3.org/2001/10/xml-exc-c14n#" id="uniqueNodeId">
            <authentication:pid>some value</authentication:pid>
            ... 
            <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> ... </Signature> 
        </authentication:authenticationRequest>
    </soapenv:Body>
</soapenv:Envelope>

Обратите внимание, что заголовок пуст.

Глядя на WSDL, тип AuthenticationRequest действительно определяет Signature как его внутренний элемент, и я могу установить его в файле java при использовании сгенерированных файлов. Однако я не знаю подписи на этом этапе; так как это то, что я хотел бы рассчитать рамки для расчета.

Для вызова я использую Spring-WS Security, которая основана на https://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/XWS-SecurityIntro4.html, как я понимаю. Когда я пытаюсь подписать контент, он помещает подпись в заголовок, и я не могу найти способ поместить его в тело. Вызываемый WS I возвращает ошибку, что он не может проверить подпись, и я не уверен, что это потому, что он отправляется в заголовке, а не в теле, или это не связанная проблема.

Так что, в конечном счете, мой вопрос, это это стандартная практика ставить подпись в тело? Если нет, есть ли еще способ добиться этого с помощью Spring-WS Security?

...