2

由于希望尽可能保持 Web 服务无状态,我遇到了一个问题。我最近开始使用 Axis2 并试图找到一个可行的身份验证解决方案。对于身份验证,我的意思是用户/密码。我已经将 SSL 与 WS-Policy 结合使用来保护过程调用。

但是,我发现与 Rampart 1.6.2 捆绑的一些示例已经过时,尤其是名为“sample-tomcat”的策略示例及其 WSPasswordCallback 处理程序(可在此处找到)。WSPasswordCallback.USERNAME_TOKEN_UNKNOWN在 1.6 中已弃用,并且WSPasswordCallback.getPassword()始终返回 null,即使在消息的安全标头中的 UsernameToken 元素中提供了密码。

所以。我不确定从哪里着手检查每条消息的用户名/密码。我正在看这两个选项:

  1. 使用执行用户名/密码身份验证的处理程序编写模块。

  2. 放弃无状态并编写登录服务,返回所有其他服务所需的令牌。

还有其他选择吗?

4

1 回答 1

1

实际上,根据 WSS4J 开发人员 Colm O Heigeartaigh 的说法,在更改之前使用验证器接口更奇怪,请参阅他关于 WSS4J 1.6 中新验证器设计的第一篇、第二篇第三篇博客文章。

不应该处理身份验证,它被认为是糟糕的WSPasswordCallback设计并且反对关注点分离,因此他们(WSS4J 开发人员)重写了 WSS4J 的这一部分。

然而,据我所知,Rampart 开发团队还没有实现开发人员应用自定义验证器的方法,也没有应用 WSS4J 验证器之类的方法NoOpValidator——即使它在 WSS4J 中可用。在他们的(Rampart 的)项目 JIRA 中注册了一个问题(在此处阅读),但它的优先级较低,目前正在编写;该问题不包含在下一个次要 (1.6.3) 或主要 (1.7.0) 版本中。

因此,您必须按照我自己的喜好执行以下三件事:

  • 使用基于传输层的身份验证,我建议使用 HTTPS 传输的身份验证标头。
  • 将 Axis2 和 Rampart 降级到 1.5.x,该版本仍在维护中(关键错误修复)。
  • 编辑 wss4j 的源代码并编译一个新的 jar。
  • 为 Axis2 编写一个模块来解决这个问题。

如果有其他解决方案/解决方法,请随时评论/纠正我。

于 2013-02-21T09:43:50.650 回答