CXF web service安全之Username Token Authentication

来源:互联网 发布:网络安全管理 编辑:程序博客网 时间:2024/05/09 13:20

WS-Security安全标准头它允许你

通过认证令牌服务之间

加密消息信息部分

签署信息

时间戳消息

CXF依靠WSS4J在很大程度上实现Web服务安全在你自己的Web服务安全服务可以通过使用WS安全策略它提供了一个全面和复杂的接收消息的安全性能验证一个非WS安全策略的方法通常是可能通过CXF拦截器添加到您的服务和/客户的详细阐述。下面通过一个实例简单介绍如何通过认证令牌来实现Web服务的安全

通过认证令牌服务之间

WS安全支持许多方式的安全令牌规范其中之一是UsernameToken标头这是一个标准的方式来传达一个用户名和密码或加密密码到另一端接收

如果一个请求用户为无效的UsernameToken,那应该缓存消息防范重复攻击这种行为是默认情况下启动CXF 2.6.0启用此功能也可以从Apache CXF 2.4.72.5.3起,默认是不启用所有向后兼容

WS安全启用

WS安全临时缓存实例这是一个参考的一replaycache实例用于缓存的UsernameToken nonce这是使用默认实例ehcachereplaycache

WS安全缓存配置文件-将此属性设置为指向一个配置文件缓存的实现这是使用默认的配置文件是cxf-ehcache.xmlCXF RT WS安全模块

 客户端实例代码:

        SpringBusFactory bf = new SpringBusFactory();        URL busFile = Server.class.getResource("/wssec.xml");        Bus bus = bf.createBus(busFile.toString());        Map<String, Object> outProps = new HashMap<String, Object>();
        //UsernameToken Timestamp进行安全验证
        outProps.put("action", "UsernameToken Timestamp");               outProps.put("passwordType", "PasswordText");        outProps.put("user", "Alice");        outProps.put("passwordCallbackClass", "demo.wssec.server.UTPasswordCallback");        bus.getOutInterceptors().add(new WSS4JOutInterceptor(outProps));        Map<String, Object> inProps = new HashMap<String, Object>();        inProps.put("action", "UsernameToken Timestamp");        inProps.put("passwordType", "PasswordDigest");        inProps.put("passwordCallbackClass", "demo.wssec.server.UTPasswordCallback");        bus.getInInterceptors().add(new WSS4JInInterceptor(inProps));        BusFactory.setDefaultBus(bus);

客户端对应Handler:

public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {        for (int i = 0; i < callbacks.length; i++) {            WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];            String pass = passwords.get(pc.getIdentifier());            if (pass != null) {                pc.setPassword(pass);                return;            }        }    }
服务器端代码和上面雷同,请参考Apache Cxf官方例子!Username Token Authentication 例子比较简单容易理解,后续将重点阐述Signature and Encryption

 

 

原创粉丝点击