【问题标题】:How To enhance The Callback handler CXF Interceptor method如何增强回调处理程序 CXF 拦截器方法
【发布时间】:2016-05-03 16:10:29
【问题描述】:

我在一个spring bean配置文件中做了一个WSS4JInInterceptor如下

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
        xmlns:jaxrs="http://cxf.apache.org/jaxrs"
        xsi:schemaLocation="http://cxf.apache.org/jaxws 
                            http://cxf.apache.org/schemas/jaxws.xsd
                            http://www.springframework.org/schema/beans 
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://cxf.apache.org/jaxrs 
                            http://cxf.apache.org/schemas/jaxrs.xsd">

        <jaxws:endpoint id="book"
            implementor="net.ma.soap.ws.endpoints.IBookEndPointImpl" address="/bookAuth">
            <jaxws:inInterceptors>
                <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"></bean>
                <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
                    <constructor-arg>
                        <map>
                            <entry key="action" value="UsernameToken" />
                            <entry key="passwordType" value="PasswordText" />
                            <entry key="passwordCallbackClass" value="net.ma.soap.ws.service.ServerPasswordCallback"></entry>
                        </map>
                    </constructor-arg>
                </bean>
            </jaxws:inInterceptors>
        </jaxws:endpoint>
    </beans>

ServerPasswordCallBack.java 如下所示

    package net.ma.soap.ws.service;

    import java.io.IOException;
    import java.util.ResourceBundle;
    import javax.security.auth.callback.Callback;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.callback.UnsupportedCallbackException;
    import org.apache.wss4j.common.ext.WSPasswordCallback;

    public class ServerPasswordCallback implements CallbackHandler {

        private static final String BUNDLE_LOCATION = "zuth";
        private static final String PASSWORD_PROPERTY_NAME = "auth.manager.password";
        private static String password;

        static {
            final ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_LOCATION);
            password = bundle.getString(PASSWORD_PROPERTY_NAME);
        }

        @Override
        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
            WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
            pc.setPassword(password);
        }
    }

通过密码验证,一切正常。

我想知道是否有任何其他方法可以增强 handle(Callback) 方法以使其更复杂,以便能够检查多个参数,例如,如果我可以让它检查访问令牌,这样会更好。

密码属性在zuth_fr_FR.properties文件中定义如下

auth.manager.password=najah

【问题讨论】:

  • WSPasswordCallback 有一个方法 getIdentifier() 从安全标头中获取用户名的值。
  • 这是进行更复杂身份验证的唯一选择吗?
  • 据我所知是的。但是使用密码作为摘要和 WS-Security 的其他功能,如签名和加密(最好使用 WS-Policy 或 CryptoCoverageChecker 来避免签名包装攻击)就足够了。顺便说一句:将密码作为纯文本存储在属性文件中可能不是避免未经授权访问的最安全方法。 ;-)
  • @Frank,您对密码存储策略有何建议?你有什么可以展示如何实现 WS-Security 的特性的东西,比如 signatureencryption WS-Policy
  • 关于密码我建议阅读spec。可以在他们的网站http://cxf.apache.org/docs/ws-security.html 上找到一个使用 cxf 实现加密的简单示例

标签: java spring authentication cxf interceptor


【解决方案1】:

如果您想对您的用户名和令牌进行一些自定义验证(例如使用 LDAP 或类似的方式验证目录服务),您可以编写自己的自定义 UsernameTokenValidator 覆盖 UsernameTokenValidator 的 verifyPlaintextPassword(UsernameToken usernameToken) 并将其连接到您的 WSS4JInInterceptor 添加以下是您的 bean 定义

<property name="wssConfig">
        <ref bean="usernameTokenWssConfig"/>
</property>

并将引用的类添加到您的代码库中:

@Component("usernameTokenWssConfig")
public class usernameTokenWssConfigWSSConfig {
    public usernameTokenWssConfig() {
        setValidator(WSSecurityEngine.USERNAME_TOKEN, new CustomUsernameTokenValidator());
        setRequiredPasswordType(WSConstants.PASSWORD_TEXT);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2023-04-07
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多