关于CXF对于WS-Security中用户验证机制的疑问!

bayer 发布于 2012/04/08 17:09
阅读 2K+
收藏 0

首先, 非常感谢zhushidan100同学的博文(http://zhushidan100.iteye.com/blog/1167751)让我想起了这个问题:

问题描述:

       某些WebService只能为特殊的用户服务, 在使用CXF实现WS-Security的用户验证机制的过程中, CXF服务端通常使用一个实现了CallbackHandler的类, 来根据收到的请求中包含的用户名, 查找其密码, 并将找到的密码交给CXF, 由CXF来验证用户请求中包含的密码 与 服务端提供的密码, 二者是否匹配;

       如果用户发来的密码, 和 服务端从数据库里找到的密码都是明文, 那么很好处理;

       但, 通常情况下, 用户的密码在服务端的数据库中都是被MD5/SHA+salt的了, 也就是说, 我们没有办法从数据库中找到某用户的明文密码;

      此时, 用户在请求WebService时, 发来了明文密码, 而在服务端只能根据用户名从数据库找出一个hash过的密码, 交给CXF, 这时, 验证是不是就没法通过了?

      当然, 用户在请求WebService时, 也可以通过CXF本身提供的方法, 对密码进行加密后, 再传输请求数据. 可CXF仍期望从服务端获得的用户密码是明文的, 这样才能通过其内部机制正确匹配.

      如此以来, 在没有细究CXF内部是如何进行密码匹配的前提下, 如果服务端对用户的密码进行过不可逆的加密处理, 似乎就没有办法通过CXF的UsernameToken验证, 继而也没有办法实现WS-Security的用户验证...

      不知有没有朋友实践过, 欢迎指教! 谢谢!

加载中
0
小文大哥哥
小文大哥哥
可能你没看的清楚
  1. <!-- MD5加密明文密码 -->
  2. <entry key="passwordType" value="PasswordDigest" />

这个键值对就是定义密码加密类型为md5,客户端发送的密码肯定会经过md5加密处理,

从而得到的密码跟服务端获取的密码就一致了。

0
bayer
bayer

引用来自“郑少文(jacob)”的答案

可能你没看的清楚
  1. <!-- MD5加密明文密码 -->
  2. <entry key="passwordType" value="PasswordDigest" />

这个键值对就是定义密码加密类型为md5,客户端发送的密码肯定会经过md5加密处理,

从而得到的密码跟服务端获取的密码就一致了。

服务端采用BCrypt方式加密用户密码, 请问这样的情况下, 如何使用UsernameToken实现用户验证. 用户将MD5的密码传给CXF, 服务端将该用户BCrypt加密后的密码传给CXF, 这怎能通过用户验证?
0
小文大哥哥
小文大哥哥

引用来自“bayer”的答案

引用来自“郑少文(jacob)”的答案

可能你没看的清楚
  1. <!-- MD5加密明文密码 -->
  2. <entry key="passwordType" value="PasswordDigest" />

这个键值对就是定义密码加密类型为md5,客户端发送的密码肯定会经过md5加密处理,

从而得到的密码跟服务端获取的密码就一致了。

服务端采用BCrypt方式加密用户密码, 请问这样的情况下, 如何使用UsernameToken实现用户验证. 用户将MD5的密码传给CXF, 服务端将该用户BCrypt加密后的密码传给CXF, 这怎能通过用户验证?
不可逆加密方式,应该在确定之前就应该再客户端和服务端都约定好,大家使用的加密方式是什么。如果按你这样说的话,就没办法往下继续了。就不说webservice了,就普通的加密解密,如果你存入数据库的用户密码是用md5加密的,而用户注册后密码通过BCrypt加密,那你还怎么匹配呢?你觉得呢?
0
bayer
bayer
呵呵 我觉得我的表达能力太差了 没法交流 能关闭或删除讨论贴么?
0
bayer
bayer

finally, I got the answer.

See http://blog.jeshurun.ca/technology/jax-ws-web-services-with-spring-and-cxf#comment-276 to get the idea about how to validate UsernameToken in your own way but not the default way settled by CXF.

And http://www.iteye.com/topic/680732 can help to understand how does the UsernameToken actually work.

返回顶部
顶部