apache-axis - 了解 Rampart 引擎的工作原理

标签 apache-axis rampart

我知道 Apache Rampart 配置允许提供密码回调处理程序类,该类可用于提供 Rampart 引擎在发送消息时构建用户名 token 和创建签名所需的密码。 据记载,每当 Rampart Engine 需要密码来创建用户名 token 时,它就会创建一个 WSPasswordCallback 实例,设置从 Rampart 配置的参数中提取的适当标识符,并通过 handle 方法将其传递给密码回调类。但正如您所见,我使用了基于策略的配置!

所以我有几个问题来看看我是否理解了所有这些:

  1. 我是从这里,rampart 引擎提取适当的用户名 - wsse:Username>bob</wsse:Username>'+

  2. 提取后,它通过句柄方法将其传递给我们的 PWCBHandler 类。 如果用户名正确,我们的处理方法会设置适当的密码。

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

这是我的代码。


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

    公共(public)无效句柄(Callback []回调)抛出IOException,UnsupportedCallbackException { for (int i = 0; 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");
             }
         }
     }
    

这是我来自 javascript 的 SOAP 请求

 "<?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>';

最佳答案

我先回答你的第三个问题

您正在使用用户名 token 身份验证方法来验证服务。为了提供安全性,您需要使用 https 传输而不是 http。这样您就可以提供传输级安全性并隐藏您的密码。一些不错的读物可以在这里找到http://wso2.com/library/3190/

如果您使用不安全的 channel (例如http),那么您可以加密密码。用户可以使用随机字节(nounce)创建密码摘要。为了验证请求,服务将使用绑定(bind)到接收到的用户名的密码来计算摘要值,并将接收到的摘要值与计算出的摘要值进行比较。安全 header 将被更改。一些详细信息可以在这找到。 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:是

关于apache-axis - 了解 Rampart 引擎的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16007912/

相关文章:

java - Spring Boot 1.4 和 Apache Axis2 - Tomcat 无法通过运行 Jar 启动

java - Axis2 stub 生成问题

tomcat - 使用 Axis2 在 Tomcat 上运行 JAX-WS

java - 将 X.509 证书存储在 Java keystore 中

java - 轴2 : Load module only once

java - Apache Rampart 是否与 Maven 一起工作?

java - Axis2 客户端 - 使用 href 解析结果

java - Axis2 Soap WS 客户端 : java. lang.NoClassDefFoundError: org/apache/ws/commons/schema/XmlSchema

java - Apache Rampart 的 Maven 依赖项解析失败

java - 使用 Apache Axis2 和 Rampart 创建 Web 服务客户端