我正在尝试使用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。
答案 0 :(得分:0)
好的,我终于打算解决这个问题了。事实证明,与本地机器时间相比,服务器时间延迟了2分钟。 Webservice需要客户端和服务器之间的时间不能超过几秒钟。当我调整时间时,一切正常。
此外,日志Mar 20 09:15:52 CET 2018
中的当前时间和消息2018-03-20T08:15:52.464Z
中的时间相同,但格式不同。