由于希望尽可能保持 Web 服务无状态,我遇到了一个问题。我最近开始使用 Axis2,并试图找到一个可行的身份验证解决方案。对于身份验证,我的意思是用户/密码。我已经结合使用 SSL 和 WS-Policy 来保护过程调用。
但是,我发现一些与 Rampart 1.6.2 捆绑在一起的样本已经过时,尤其是名为“sample-tomcat”的策略示例及其 WSPasswordCallback 处理程序(找到 here)。 WSPasswordCallback.USERNAME_TOKEN_UNKNOWN
在 1.6 中已被弃用,并且 WSPasswordCallback.getPassword()
始终返回 null,即使在消息的安全 header 中的 UsernameToken 元素中提供了密码也是如此。
所以。我不确定从哪里开始检查每条消息的用户名/密码。我正在查看这两个选项:
使用执行用户名/密码身份验证的处理程序编写模块。
放弃无状态并编写一个登录服务返回所有其他服务所需的 token 。
还有其他选择吗?
最佳答案
实际上,根据 WSS4J 开发人员 Colm O Heigeartaigh 的说法,在更改之前使用 validator 接口(interface)更奇怪,请参阅 his first , his second和 his third有关 WSS4J 1.6 中新 validator 设计的博客文章。
WSPasswordCallback
不应处理身份验证,它被认为是糟糕的设计并且不利于关注点分离,因此他们(WSS4J 开发人员)重写了 WSS4J 的这一部分。
但是,据我所知,Rampart 开发团队尚未为开发人员实现应用自定义 validator 的方法,也没有应用 WSS4J validator (例如 NoOpValidator
)的方法 - 甚至尽管它在 WSS4J 中可用。在他们的(Rampart 的)项目 JIRA(read it here)中注册了一个问题,但它的优先级很低,截至目前正在编写;该问题不包含在下一个次要 (1.6.3) 或主要 (1.7.0) 版本中。
因此,您必须按照我自己的喜好顺序执行以下三项操作中的一项:
- 使用基于传输层的身份验证,我会推荐使用 HTTPS 传输的身份验证 header 。
- 将 Axis2 和 Rampart 降级到 1.5.x,该版本仍在维护(关键错误修复)。
- 编辑 wss4j 的源代码并编译一个新的 jar。
- 为 Axis2 编写一个模块来解决这个问题。
如果有其他解决方案/解决方法,请随时发表评论/纠正我。
关于java - Axis2 用户认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13817145/