我对SOAP Web服务比较陌生,它似乎是一个基本的东西,但仍然,我找不到解决它的方法。我有一个使用Spring WS和XWS安全性编写的SOAP服务器。这些是相关的bean:
<bean id="wsSecurityInterceptor" class="org.springframework.ws.soap.security.xwss.XwsSecurityInterceptor">
<property name="policyConfiguration"
value="classpath:security-policy.xml"/>
<property name="callbackHandlers">
<list>
<ref bean="passwordValidationHandler"/>
</list>
</property>
</bean>
<bean id="passwordValidationHandler" class="org.springframework.ws.soap.security.xwss.callback.SimplePasswordValidationCallbackHandler">
<property name="users">
<props>
<prop key="user">*****</prop>
</props>
</property>
</bean>
以下是security-policy.xml
:
<xwss:SecurityConfiguration xmlns:xwss="http://java.sun.com/xml/ns/xwss/config">
<xwss:RequireUsernameToken passwordDigestRequired="true" nonceRequired="true"/>
<xwss:UsernameToken digestPassword="true" useNonce="true"/>
</xwss:SecurityConfiguration>
问题是我想使用nonce(一次性令牌来阻止再次发送截获的请求)来建立摘要式身份验证。据我所知(这里描述http://www.whitemesa.com/soapauth.html#S4),服务器应该创建一个挑战(nonce和timestamp,我认为)然后客户端应该用它的密码和时间戳加密它并将其发送回服务器进行验证。这应该适用于每个请求。即使用户发送空请求,服务器也应提供质询。但就我而言,它不起作用。我错过了什么吗?
答案 0 :(得分:0)
当它出现时,不一定是服务器应该生成nonce。我在客户端生成它,连接并根据rules对其进行哈希处理,然后发送到服务器。坦率地说,我只能通过调试Spring WS源并查找确切的身份验证问题来找到错误的根源。