Apache Rampart 構成では、Rampart エンジンがユーザー名トークンを作成し、メッセージを送信するときに署名を作成するために必要なパスワードを提供するために使用できるパスワード コールバック ハンドラ クラスを提供できることを知っています。Rampart エンジンがユーザー名トークンを作成するためにパスワードを必要とするときはいつでも、Rampart 構成のパラメーターから抽出した適切な識別子を設定する WSPasswordCallback インスタンスを作成し、handle メソッドを介してパスワード コールバック クラスに渡すと書かれています。しかし、ご覧のとおり、ポリシー ベースの構成を使用しました。
そのため、すべてを理解しているかどうかを確認するために、いくつか質問があります。
城壁エンジンが適切なユーザー名を抽出する場所から私はいますか -
wsse:Username>bob</wsse:Username>'+
それを抽出した後、handle メソッドを介して PWCBHandler クラスに渡します。ユーザー名が正しい場合、ハンドル メソッドは適切なパスワードを設定します。
そして最も重要なことは、最後に 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>';