0

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

但是有一个客户端代码在 WS 安全标头中以 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>
4

1 回答 1

1

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

科尔姆。

于 2014-07-14T10:04:48.587 回答