使用身份验证的SOAP客户端失败

时间:2019-07-01 09:36:49

标签: soap wss4j

我正在尝试连接到需要身份验证的服务。 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标头应符合WS-Security UsernameToken规范的1.0版。

阅读规范,我看到我可以选择使用PasswordText或PasswordDigest类型,并且两者都定义为UTF8编码的密码(或等效方法)的Base64 [XML-Schema]编码的SHA-1哈希值。 )

我尝试将客户端设置为这些值,但是失败了。

   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发送失败,并显示“检索数据时发生错误。”

我可能丢失了一些东西,但是我不知道是什么。知道我该如何进行吗?

0 个答案:

没有答案