在 SoapUI 中使用授权时出错

Error while using authorization in SoapUI

我正在尝试使用 SoapUI 作为客户端在 weblogic 12c(未在本地安装)上测试我的 SOAP 网络服务 运行。未经授权一切正常,但是当我在服务器上实现非常简单的 UserToken 并执行此处描述的每个步骤时:

https://www.soapui.org/soap-and-wsdl/authenticating-soap-requests.html

然后出现以下错误:

<faultcode>wsse:InvalidSecurityToken</faultcode>
<faultstring>Security token failed to validate. weblogic.xml.crypto.wss.SecurityTokenValidateResult@211ca945[status: false][msg UNT Error:Message Created time past the current time even accounting for set clock skew]</faultstring>

我还查看了 SoapUI 的 http 日志,发现那里有一些奇怪的东西:

Tue Mar 20 09:15:52 CET 2018:DEBUG:>> 
 <soapenv:Header>
  <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="..." xmlns:wsu="...">
   <wsse:UsernameToken wsu:Id="UsernameToken-374B6AAD9B07D377D515215337525091">
    <wsse:Username>user</wsse:Username>
    <wsse:Password Type="...#PasswordText">password</wsse:Password>
    <wsse:Nonce EncodingType="...#Base64Binary">urRvoAYbjjovfD0OQqvJ6g==</wsse:Nonce>
    <wsu:Created>2018-03-20T08:15:52.464Z</wsu:Created>
   </wsse:UsernameToken>
  </wsse:Security>
 </soapenv:Header>

日志时间(当前时间)与 <wsu:Created> 标签中的时间不同。我不知道这是否重要,但我在 UTC+01:00 时区。

编辑

我放弃了 SoapUI,我已经使用 CredentialProvider:

授权实现了我自己的 Java 客户端
((BindingProvider) port).getRequestContext().put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST, credentialProviders);

然后还是一样!所以可能不是 SoapUI 问题,而是其他问题。

Exception in thread "main" com.sun.xml.ws.fault.ServerSOAPFaultException:
Client received SOAP Fault from server: Security token failed to validate. weblogic.xml.crypto.wss.SecurityTokenValidateResult@37b70a09[status: false]
[msg UNT Error:Message Created time past the current time even accounting for set clock skew] Please see the server log to find more detail regarding exact cause of the failure.
    at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:131)
    at com.sun.xml.ws.client.sei.StubHandler.readResponse(StubHandler.java:253)
    at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:203)
    at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:290)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:92)
    ...

当我使用 Wireshark 查看消息时,header 中的时间也减少了一个小时。这真的很奇怪,我不知道发生了什么。我应该如何使用授权测试我的网络服务?我在本地使用 Windows 7,但我的 Weblogic 在 CentOS 7 上是 运行。正如我所说,两者都设置为 UTC+01:00。

好的,我终于设法解决了这个问题。事实证明,与本地机器时间相比,服务器时间晚了 2 分钟。 Webservice 要求客户端和服务器之间的时间不能大于几秒。当我调整时间时,一切正常。

此外,日志中的当前时间 Mar 20 09:15:52 CET 2018 和消息中的时间 2018-03-20T08:15:52.464Z 是相等的,只是格式不同。