2012-12-11 66 views
2

由于要尽可能保持Web服务无状态的雄心,我遇到了一个问题。我最近开始与Axis2合作,并试图找到可行的身份验证解决方案。通过身份验证,我的意思是用户/密码。我已经将SSL与WS-Policy结合使用来确保程序调用的安全。然而,我发现一些与Rampart 1.6.2捆绑在一起的样本已经过时,特别是名为“sample-tomcat”和它们的WSPasswordCallback处理程序(找到了here)的策略示例。 WSPasswordCallback.USERNAME_TOKEN_UNKNOWN在1.6中被弃用,并且WSPasswordCallback.getPassword()总是返回null,即使在消息的安全性标头中的UsernameToken元素中提供了密码。Axis2用户认证

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

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

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

还有其他的选择吗?

+0

我不认为你可以摆脱无国籍状态,但你可以通过请求中的一些信息进行身份验证/授权。 –

+0

摆脱无国籍?那么,我可以实现状态,这是肯定的。但我希望尽可能少的状态,最好没有任何。 – Wrench

回答

1

实际上,根据WSS4J开发商科尔姆ØHeigeartaigh,这是比较奇怪之前变化与验证接口工作,看到有关WSS4J 1.6新的验证设计his firsthis secondhis third博客文章。

WSPasswordCallback不应该处理认证,它被认为是不好的设计和反对关注的分离,因此他们(WSS4J开发人员)重写了WSS4J的这部分。但是,据我所知,Rampart开发团队尚未实现开发人员应用自定义验证程序的方式,也没有办法应用WSS4J验证程序(如NoOpValidator) - 即使它在WSS4J中可用。在他们的(Rampart's)项目JIRA(read it here)中注册了一个问题,但是它的优先级低,并且正在写这个问题。该问题未包含在下一个未成年人(1.6.3)或主要(1.7.0)版本中。

所以,你必须做以下三件事的两种,在我自己的优先顺序:

  • 使用传输层基础的认证,我会建议AUTH头与HTTPS传输。
  • 将Axis2和Rampart降级到1.5.x,仍然保留(重大bug修复)。
  • 编辑wss4j的源代码并编译一个新的jar。
  • 为Axis2编写一个解决此问题的模块。

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