WS-Secured标头验证(WSS4j)与UsernameToken TimeStamp针对不同时区的错误

时间:2014-07-12 17:04:24

标签: java cxf ws-security wss4j

我在Apache CXF(2.7.11)中使用带有UsernameToken时间戳功能的WSS4J构建了一个Web服务(自上而下)。当我使用SOAP UI测试相同的服务器&客户端代码似乎工作正常。

但是有一个客户端代码在WS Security标头中以IST(印度标准时间)时区发送数据;为此,客户端收到错误The message has expired (WSSecurityEngine: Invalid timestamp The security semantics of the message have expired)正在被抛出。调查我发现WSS4J使用的时区是UTC。在WSS4JInterceptor中使timestampStrict为false也不起作用。任何帮助将不胜感激。

<jaxws:inInterceptors>                  
     <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
     <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
        <property name="properties">
              <map>
                     <entry key="action" value="UsernameToken Timestamp" />
                     <entry key="timestampStrict" value="false"/>
                     <entry key="user" value="test_user" />
                     <entry key="passwordType" value="PasswordText" />
                     <entry>
                            <key>
                                   <value>passwordCallbackRef</value>
                            </key>
                            <ref bean="passwordCallback" />
                     </entry>
              </map>
        </property>
     </bean>
</jaxws:inInterceptors>

1 个答案:

答案 0 :(得分:1)

根据SOAP消息安全配置文件,在UTC时间之外的任何时间发送时间戳无效:“所有引用必须是UTC时间。”。

科尔姆。