在SoapUI中使用授权时出错

时间:2018-03-20 08:52:03

标签: soap soapui weblogic12c

我正在尝试使用SoapUI作为客户端测试在weblogic 12c(本地未安装)上运行的SOAP Web服务。没有授权,一切正常,但是当我在服务器上实现非常简单的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查看消息时,标题中的时间也减少了一个小时。这真的很奇怪,我不知道发生了什么。我该如何使用授权测试我的网络服务?本地我使用的是Windows 7,但是我的Weblogic在CentOS 7上运行。正如我所说,它们都设置为UTC + 01:00。

1 个答案:

答案 0 :(得分:0)

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

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