科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件基于XFire实施WS-Security(第二部分)

基于XFire实施WS-Security(第二部分)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对SOAP报文进行身份认证的方式很多,不过都是通过在SOAP报文头中添加一些安全凭证(Security Token)信息来完成的,主要包括以下一些身份凭证。

作者:闹市孤僧 2007年5月30日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

由于需要对SOAP进行前置处理,所以必须将STAX流模型的SOAP转换为DOM模型,这通过在②处指定一个DOMInHandler来完成。在③注册了一个处理SOAP报文的WSS4JInHandler,用于对接收的SOAP报文进行前置处理,与其对应的是WSS4JOutHandler,它对SOAP报文进行后置处理。两者都具有极高的定制性,可以通过配置定制各种加工逻辑,这可以通过合理设置properties属性达到各种加工处理的要求。

在④处,我们定义了一个action属性,它定义了需要处理的动作,UsernameToken表示进行用户名/密码认证的操作。其它的动作包括Encrypt、Signature、Timestamp、SamlTokenUnsigned等,可以同时设置多个动作,多个动作之间用空格分隔,如<prop key="action">Encrypt Signature</prop>。

不同的动作通过设置配套的其它属性提供相应的操作,我们通过了passwordCallbackClass属性指定一个密码回调实现类来处理UsernameToken密码查询和认证的工作。

passwordCallbackClass指定的类必须实现javax.security.auth.callback.CallbackHandler接口,其代码如下所示:

代码清单2 UtPasswordHandler

package com.baobaotao.xfire.wss4j.server;

import java.util.*

import javax.security.auth.callback.Callback;

import javax.security.auth.callback.CallbackHandler;

import org.apache.ws.security.WSConstants;

import org.apache.ws.security.WSPasswordCallback;

import org.apache.ws.security.WSSecurityException;

public class UtPasswordHandler implements CallbackHandler {

private static final Map pwMockDB = new HashMap();①正确用户/密码的模拟数据

static{

pwMockDB.put("tom", "123456");

pwMockDB.put("john", "123456");

pwMockDB.put("katty", "123456");

pwMockDB.put("mike", "123456");

}

public void handle(Callback[] callbacks) throws WSSecurityException{②回调接口方法

WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];②-1:获取回调对象

String id = callback.getIdentifer();②-2:获取用户名

String validPw = (String)pwMockDB.get(id);②-3:获取用户对应的正确密码

②-4:如果是明文密码直接进行判断

if(WSConstants.PASSWORD_TEXT.equals(callback.getPasswordType())){

String pw = callback.getPassword();

if(pw == null || !pw.equalsIgnoreCase(validPw)){

throw new WSSecurityException("password not match");

}

}else{②-5:如果是密码摘要,向回调设置正确的密码(明文密码)

callback.setPassword(validPw);

}

}

}

PasswordHandle负责根据用户名查询正确的密码,这里,我们通过一个pwMockDB模拟存储用户名密码的数据库,如①所示。如果客户端以明文形式发送密码,UtPasswordHandler可以直接判断密码的正确性,如②-4所示。反之,如果以摘要的方式发送密码,UtPasswordHandler必须将正确的密码设置到callback中,以便WSS4JInHandler进行判断,如②-5所示。这里为明文和密文的密码分别提供了处理逻辑,但一般情况下,密码是以明文还是密文发送是交互双方已经约定好的。

你也可以通过扩展XFire的AbstractHandler定义自己的Handler,回调接口会传入MessageContext实例,可以通过MessageContext访问到SOAP中用户名/密码的信息进行认证。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章