了解rampart引擎的工作原理

时间:2013-04-15 04:56:26

标签: axis2 rampart

我知道Apache Rampart配置允许提供密码回调处理程序类,可用于提供Rampart引擎构建用户名令牌和发送邮件时创建签名所需的密码。 编写的是,每当Rampart Engine需要密码来创建用户名令牌时,它将创建一个WSPasswordCallback实例,设置从Rampart配置的参数中提取的相应标识符,并通过handle方法将其传递给密码回调类。但正如您所见,我已经使用了基于策略的配置!

所以我有几个问题要看看我是否理解了这一切:

  1. 我是否从这里开始使用垒阵引擎提取相应的用户名 - wsse:Username>bob</wsse:Username>'+

  2. 在提取之后,它通过handle方法将它传递给我们的PWCBHandler类。 如果用户名正确,我们的handle方法设置适当的密码。

  3. 最重要的是 - 因为我必须在最后通过javascript使用我的网络服务,所以我提供了肥皂请求。但是你看到我提供了用户名和密码,我无法看到安全性在哪里,因为每个人都可以看到我的用户名和密码。这是正确的吗。我怎样才能让它更安全。

  4. 这是我的代码。


    1. 这是我的PassWordCallback.java类的代码

      ublic void handle(Callback [] callbacks)抛出IOException,UnsupportedCallbackException {         for(int i = 0; i&lt; callbacks.length; i ++){

               WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
              if(pwcb.getIdentifier().equals("test") &&pwcb.getPassword().equals("pass")) {
                  return;
               } 
      
              else {
                  throw new UnsupportedCallbackException(callbacks[i],"Incorrect login/password");
               }
           }
       }
      
    2. 这是来自javascript的soaprequest

       "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                      "<soapenv:Envelope " + 
                           "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
                           "xmlns:tan=\"http://tan\">"+
                          "<soapenv:Header>"+
                           '<wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" soapenv:mustUnderstand="1">'+
      '<wsse:UsernameToken xmlns:wsu="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="123">'+
      '<wsse:Username>bob</wsse:Username>'+
      '<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">bobPW</wsse:Password>'+
      '</wsse:UsernameToken>'+
      '</wsse:Security>'+
      "</soapenv:Header>"+
                          "<soapenv:Body>" +
                           "<tan:testws>" +
                           '<tan:x>ECHOO</tan:x>' +
                            ' </tan:testws>'+
      
                          '</soapenv:Body>' +
                      '</soapenv:Envelope>';
      

1 个答案:

答案 0 :(得分:2)

我会先回答你的第3个问题

您正在使用用户名令牌身份验证方法来验证服务。要提供安全性,您需要使用https transport而不是http。这样您就可以提供传输级安全性并隐藏密码。在http://wso2.com/library/3190/

可以找到一些不错的阅读材料

如果您使用不安全的频道(比如http),那么您可以加密密码。用户可以使用随机字节(nounce)创建密码摘要。要对请求进行身份验证,服务将使用绑定到接收的用户名的密码计算摘要值,并将比较接收的摘要值和计算的摘要值。安全标头将被更改。关于此,可以找到一些详细信息。 http://wso2.com/library/240/。为了提供更多安全性,您可以加密消息(http://wso2.com/library/3415/

对于问题1,它不会从wsse:Username获取用户名。它从Rampart配置的参数中提取用户名。可以在外部或使用java

加载此配置
RampartConfig rc = new RampartConfig();
rc.setUser("admin");
rc.setPwCbClass(PWDCallBackHandler.class.getName()); 

有关回调处理程序http://wso2.com/library/3733/

的一些信息

问题2:是的