在 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
是相等的,只是格式不同。
我正在尝试使用 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
:
((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
是相等的,只是格式不同。