我正在尝试连接到需要身份验证的服务。 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发送失败,并显示“检索数据时发生错误。”
我可能丢失了一些东西,但是我不知道是什么。知道我该如何进行吗?