我们使用旧版本的apache axis2作为我们的Web服务框架。我们正在使用rampart 1.2作为其中的一部分。
我尝试使用带有'nonce'和'timestamp'机制的密码摘要进行身份验证。我们正在尝试进行验证。 我的身份验证验证机制运行正常(包括密码回调等)
我担心的问题是让壁垒识别'重放攻击',基本上与识别这些相关联的垒垒模块的功能似乎是不活动的。 我可以多次向我的axis2服务发送相同的安全头(甚至发送我昨天生成的安全头),并且它可以正常验证并完成Web服务请求。
我最好的猜测是:我在某个地方缺少一个配置设置,用于启用功能来检测重放攻击。 我已经尝试了下面链接(在services.xml文件中)中给出的配置建议,但似乎都不起作用: -
任何人都可以帮助或让我知道我错过了什么以及在哪里(我想象它的配置设置相关)?
我在axis2.xml文件中获得了rampart的模块声明: -
<module ref="rampart"/>
在声明所有操作后,我认为我的services.xml文件中的rampart配置设置; -
<parameter name="InflowSecurity">
<action>
<items>UsernameToken Timestamp</items>
<passwordCallbackClass>com.myCompany.service.dummy.MyAuthenticator</passwordCallbackClass>
</action>
</parameter>
<rampart:rampartconfig xmlns:rampart="http://ws.apache.org/rampart/policy">
<rampart:timestampprecisioninmilliseconds>true
</rampart:timestampprecisioninmilliseconds>
<rampart:timestampttl>300</rampart:timestampttl>
<rampart:timestampmaxskew>300</rampart:timestampmaxskew>
<rampart:timestampstrict>false</rampart:timestampstrict>
<rampart:ReplayDetection>1000</rampart:ReplayDetection>
</rampart:rampartconfig>
答案 0 :(得分:1)
如果您使用的是rampart-1.2,则必须在服务中实施重播检测。 传入的TimeStamp信息在“org.apache.ws.security.handler.WSHandlerConstants.RECV_RESULTS”键下的消息上下文属性中包含的Security头处理结果中可用。这是一个Vector,其中第一项是“org.apache.ws.security.handler.WSHandlerResult”实例(下一个代码片段中的wsResult)。
然后您可以获得时间戳信息,如下所示:
actionResult = WSSecurityUtil.fetchActionResult(wsResult,
WSConstants.TS);
if (actionResult != null) {
Timestamp timestamp = actionResult.getTimestamp();
//Your validation goes here...
}
根据您引用的博客文章的建议,您可以尝试升级到rampart-1.6.2并使用基于策略的配置。