我使用Rampart作为我的WS-Security模块而不是Axis2。
我的政策XML文件如下:
<wsp:Policy wsu:Id="UsernameToken"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>>
<sp:IncludeTimestamp />
</wsp:Policy>
</sp:TransportBinding>
<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:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:passwordType>PasswordText</ramp:passwordType>
</ramp:RampartConfig>
它工作正常,如下面的SOAP调用所示:
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-1">
<wsu:Created>2013-12-24T12:55:39.089Z</wsu:Created>
<wsu:Expires>2013-12-24T13:00:39.089Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-2">
<wsse:Username>username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
我想要做的是配置Created值,使其不一定与服务器时间绑定,并配置Created和Expires之间的持续时间。
我该怎么做?
答案 0 :(得分:1)
好的,我正在回答我自己的问题。
似乎没有必要设置不同的时间戳,因为按照标准,时间戳应该以UTC格式发送。
对于TTL,可以从policy.xml文件配置:
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:timestampTTL>600</ramp:timestampTTL>
<ramp:timestampMaxSkew>600</ramp:timestampMaxSkew>
<ramp:RampartConfig>
我会保持线程开放一两天,看看是否还有其他人愿意提出不同意见。
答案 1 :(得分:0)
现在我们有关于创建日期和到期日期之间的持续时间的问题。似乎消息在服务器到期后收到,这是因为服务器和客户端时钟之间存在很大差异(我的意思是超过2或5秒)。解决方法是增加
<ramp:timestampTTL>600</ramp:timestampTTL>
<ramp:timestampMaxSkew>600</ramp:timestampMaxSkew>
这可以通过在客户端使用rampartConfig.setTimestampTTL
和rampartConfig.setTimestampmaxSkew
方法来完成。