Добавление BinarySecurityToken в заголовок запроса Soap с помощью Spring Soap Security - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь создать клиент для вызова Soap Web Service с использованием Spring. Я использую CXF для генерации клиентских классов Java для создания тела и выполнения запроса, но у меня возникают проблемы с заголовком безопасности, который должен иметь BinarySecurityToken.

Я могу сгенерироватьзаголовок пользователя / пароля, с перехватчиком, который обеспечивает CallbackHandler, таким образом:

    XwsSecurityInterceptor sec = new XwsSecurityInterceptor();
    System.out.println(username);
    System.out.println(policy);
    sec.setPolicyConfiguration(policy);
    sec.setCallbackHandler(new SimpleUsernamePasswordCallbackHandler(username, password));

Это создает заголовок SOAP с пользователем и паролем, как этот:

<SOAP-ENV:Header>
      <wsse:Security soap-env:mustUnderstand="1" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <wsse:UsernameToken wsu:Id="UsernameToken-24768380" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsse:Username>N070044</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">N070044</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
</SOAP-ENV:Header>

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

<SOAP-ENV:Header> 
<wsse:Security SOAP-ENV:actor="http://www.isban.es/soap/actor/wssecurityUserPass" SOAP-ENV:mustUnderstand="1" S12:role="wsssecurity" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:S12="http://www.w3.org/2003/05/soap-envelope">
<wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
wsu:Id="SSOToken" ValueType="esquema" EncodingType="wsse:Base64Binary">QjQ3MDY5MzBFMDNDRjQwMDhGMjYyRDJCIzE4MC4xMTIuMTA1LjQ4IzEzODUzODE4NzAzMTAjUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVNWTlBMVGc0TlRrdE1TSS9QangwYjJ0bGJrUmxabWx1YVhScGIyNCtQSFZ6WlhKSlJENXVPVEF5TWpJOEwzVnpaWEpKUkQ0OFlXeHBZWE0rYmprd01qSXlQQzloYkdsaGN6NDhibUZ0WlQ1RFFWSk1UMU1nVFVGU1ZFbE9SVm9nVWtWRVQwNUVUend2Ym1GdFpUNDhMM1J2YTJWdVJHVm1hVzVwZEdsdmJqND0jREVTZWRlL0NCQy9QS0NTNVBhZGRpbmcjdjEjSW50cmFJU0JBTkRFUyNOT1QgVVNFRCNTSEExd2l0aFJTQSNpRXZma2luOGJVNFdnb1FTYnZvbzZEWmJENklncmJ1bEhXblVvQTJscysrczZsazNobmloaEoxRTV0cTM0VGFpZy9UUDZKdE5mMHRxSVl5dDV0Ni82MWZPcWgzRGNmNVdkZVJWNXBpRlJzazNqQU1tOCtZMGFKQlA2dkdBZWhPc1cxWjBjcFYyV05leitVTnR5UnlySysxQTdVNXJXZzB3UERQMWxEcHduOGc9
</wsse:BinarySecurityToken>
</wsse:Security>
</SOAP-ENV:Header>

Но я не могунайти способ сделать это. Я читал об использовании SpringCertificateValidationCallbackHandler, но я не могу найти примеры того, как его использовать.

Это правильный подход? Или я должен сделать это с совершенно другим подходом?

Большое спасибо заранее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...