UsernameToken Timestamp機能を備えたWSS4Jを使用して、Apache CXF(2.7.11)で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>