当我不知道密码时,使用WS-Security进行身份验证

时间:2011-11-18 01:14:44

标签: java web-services security cxf

我正在使用WSS4JInInterceptor来尝试验证我的客户端。我已经能够创建一个简单的例子。但是,我有一个问题。在我的应用程序中,我使用提供的用户名和密码来尝试打开与数据库的连接。如果连接尝试成功,则用户已经过身份验证,否则登录尝试将被拒绝。使用WSS4JInInterceptor我需要实现一个返回用户密码的回调。在我的安全方案中,我无法访问此密码。我该如何实现这样的东西?

我应该继承WSS4JInInterceptor并破解它以提供密码吗?

2 个答案:

答案 0 :(得分:1)

您无法验证然后从数据库中检索用户密码吗?如果您可以请求它,您可能会将其存储在数据库中。当然,您需要保护密码和/或数据库。

答案 1 :(得分:1)

你走了:下面你不会发现我使用回叫处理程序,因为不会真的需要(不是说你不能这样做,但这更简单)。

<jaxws:endpoint id="myService" implementor="#myServiceImpl" address="/myService">
<jaxws:inInterceptors>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
<ref bean="myServiceInterceptor"/>
</jaxws:inInterceptors>
<jaxws:properties>
<entry key="ws-security.ut.validator" value-ref="myServiceUsernameTokenValidator"/>
<jaxws:properties>
 </jaxws:endpoint>

<bean id=" myServiceInterceptor "   class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
 <constructor-arg>                              
 <map>
    <entry key="action" value="UsernameToken" />
    <entry key="passwordType" value="PasswordText" />
  </map>          
</constructor-arg>
</ bean>

在我的 myServiceUsernameTokenValidator 中,我直接连接UserDetailService,从DB获取哈希密码,然后使用

进行验证
 stringDigester.matches(passwordText, passwordDigest)