Клиент SOAP, использующий аутентификацию, терпит неудачу - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь подключиться к сервису, требующему аутентификации.Соответствующая часть файла wsdl выглядит следующим образом:

<wsp:Policy wsu:Id="SecurityServiceUsernameHashPasswordPolicy">
 <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
   <wsp:Policy>
     <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
       <wsp:Policy>
         <sp:WssUsernameToken10/>
       </wsp:Policy>
      </sp:UsernameToken>
   </wsp:Policy>
 </sp:SupportingTokens>
</wsp:Policy>

Насколько я понимаю, эта политика требует, чтобы я отправлял имя пользователя / пароль в каждом запросе, а заголовок UsernameToken должен соответствовать версии 1.0.спецификации WS-Security UsernameToken.

Чтение спецификации Я вижу, что у меня есть опция типа PasswordText или PasswordDigest, и оба они определены как закодированные в Base64 [XML-схема], SHA-1хэш-значение пароля в кодировке UTF8 (или его эквивалента)

Однако я попытался настроить мой клиент на эти значения, но безуспешно.

   MessageDigest digest = MessageDigest.getInstance("SHA-1");
   String password = "mypassword";
    byte[] encodedhash = digest.digest(password.getBytes(StandardCharsets.UTF_8));
    String hashPassword =  Base64.getEncoder().encodeToString(encodedhash);

    wss4jSecurityInterceptor.setSecurementActions("UsernameToken");
    wss4jSecurityInterceptor.setSecurementUsername("username");
    wss4jSecurityInterceptor.setSecurementPassword(hashPassword);

    //Tried with PW_TEXT well

  wss4jSecurityInterceptor.setSecurementPasswordType(WSConstants.PW_DIGEST);

Отправка hashPassword в виде PW_TEXT/ PW_DIGEST завершается с ошибкой «Тема не была создана, аутентификация завершилась неудачно»

Отправка пароля в виде открытого текста как PW_TEXT завершается с ошибкой «Произошла ошибка при получении данных».

Возможно, я что-то упустил, но я не знаю что.Есть идеи, как мне поступить?

...