我知道 Apache Rampart 配置允许提供密码回调处理程序类,可用于提供 Rampart 引擎构建用户名令牌和在发送消息时创建签名所需的密码。它写道,每当 Rampart Engine 需要密码来创建用户名令牌时,它将创建一个 WSPasswordCallback 实例,设置它从 Rampart 配置的参数中提取的适当标识符,并通过 handle 方法将其传递给密码回调类。但正如你所见,我使用了基于策略的配置!
所以我有几个问题想看看我是否理解了所有这些:
我是从这里壁垒引擎提取适当的用户名的地方吗?
wsse:Username>bob</wsse:Username>'+
在它提取它之后,它通过句柄方法将它传递给我们的 PWCBHandler 类。如果用户名正确,我们的 handle 方法会设置适当的密码。
最重要的是——因为我必须在最后通过 javascript 使用我的 web 服务,所以我提供了我的 soap 请求。但是正如您所看到的,我同时提供了用户名和密码,但我看不到安全性在哪里,因为每个人都可以看到我的用户名和密码。这是正确的吗。我怎样才能使它更安全。
这是我的代码。
这是我的 PassWordCallback.java 类的代码
ublic void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < 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"); } } }
这是我来自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>';