WSS4j 1.5:如何跳过密码验证?

时间:2016-03-21 20:22:02

标签: java security soap signing wss4j

我需要使用apache WSS4J 1.5进行一些SOAP签名/验证,但是我在跳过/禁用UsernameToken密码验证时遇到了问题。

在WSS4J 1.6+中,我能够配置安全引擎以使用NoOpValidator()类跳过用户名令牌身份验证,但1.5没有此支持。

有没有办法告诉WSS4J 1.5完全跳过用户名/密码验证路由?

2 个答案:

答案 0 :(得分:1)

你需要编写自己的回调处理程序实现来跳过加载LoginContext。然后可以从系统属性加载该处理程序类。

引用 javax.security.auth.callback.CallbackHandler 的源代码,

  

可以在。中指定默认的CallbackHandler类实现    auth.login.defaultCallbackHandler 安全属性。

     

可以在Java安全属性文件中设置security属性   位于名为/lib/security/java.security的文件中。    指的是java.home系统属性的值,和   指定安装JRE的目录。

     

如果安全属性设置为a的完全限定名称   CallbackHandler实现类,然后将加载一个LoginContext   指定的CallbackHandler并将其传递给底层   LoginModule的。

     

如果未提供默认处理程序,则LoginContext仅加载默认处理程序   一。所有默认处理程序实现都必须提供公共   零参数构造函数。

还要注意WSS4J 1.5.XX

带来的一些风险

答案 1 :(得分:0)

在更深入地挖掘WSSecEngine类之后,我发现我不需要CallBackHandler,而是一个跳过UsernameToken对象处理的自定义处理器:

        WSSecurityEngine secEngine = new WSSecurityEngine();
        WSSConfig wsConfig = WSSConfig.newInstance();
        wsConfig.setProcessor(UsernameToken.TOKEN, new Processor() {

            @Override
            public void handleToken(Element arg0, Crypto arg1, Crypto arg2, CallbackHandler arg3, WSDocInfo arg4, Vector arg5, WSSConfig arg6)
                    throws WSSecurityException {
                // skip the token processing
                logger.debug("Skipping processing of the username token");
            }

            @Override
            public String getId() {
                return null;
            }
        });
        secEngine.setWssConfig(wsConfig);

虽然WSS4J 1.5非常古老,但希望未来可能希望有其他人。

WSS4J 1.6+改变了这些处理器与Validators的协同工作方式。