Я пытаюсь подключиться к сервису, требующему аутентификации.Соответствующая часть файла 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 завершается с ошибкой «Произошла ошибка при получении данных».
Возможно, я что-то упустил, но я не знаю что.Есть идеи, как мне поступить?