This is an automated email from the ASF dual-hosted git repository. coheigea pushed a commit to branch coheigea/saml-refactor-new in repository https://gitbox.apache.org/repos/asf/ws-wss4j.git
The following commit(s) were added to refs/heads/coheigea/saml-refactor-new by this push: new 8d7b68ff1 Enforce a password is only obtained from a callbackhandler and not the message context any more 8d7b68ff1 is described below commit 8d7b68ff1c4226ad3d3ab630c380fa56f2e6c12a Author: Colm O hEigeartaigh <cohei...@apache.org> AuthorDate: Wed Jun 18 12:07:31 2025 +0100 Enforce a password is only obtained from a callbackhandler and not the message context any more --- .../org/apache/wss4j/dom/action/ActionUtils.java | 32 +++++++++++ .../wss4j/dom/action/EncryptionDerivedAction.java | 2 +- .../wss4j/dom/action/SAMLTokenSignedAction.java | 2 +- .../apache/wss4j/dom/action/SignatureAction.java | 2 +- .../wss4j/dom/action/SignatureDerivedAction.java | 2 +- .../wss4j/dom/action/UsernameTokenAction.java | 2 +- .../dom/action/UsernameTokenSignedAction.java | 2 +- .../org/apache/wss4j/dom/handler/WSHandler.java | 47 --------------- .../org/apache/wss4j/dom/common/CustomHandler.java | 12 ---- .../dom/handler/SignatureConfirmationTest.java | 10 ++-- .../dom/handler/WSHandlerGetPasswordTest.java | 67 ---------------------- .../apache/wss4j/dom/message/PasswordTypeTest.java | 2 +- .../wss4j/dom/message/SignatureCertTest.java | 4 +- .../wss4j/dom/message/SignaturePartsTest.java | 2 + .../apache/wss4j/dom/message/SignatureTest.java | 12 ++-- .../apache/wss4j/dom/message/SignedBSTTest.java | 3 +- .../wss4j/dom/message/UsernameTokenTest.java | 4 +- .../wss4j/dom/message/XOPAttachmentTest.java | 4 +- .../dom/saml/SamlTokenCustomSignatureTest.java | 3 +- .../apache/wss4j/stax/test/AbstractTestBase.java | 19 +----- .../apache/wss4j/stax/test/SignatureCRLTest.java | 3 +- .../stax/test/SignatureCertConstaintsTest.java | 3 +- .../test/SignatureIssuerCertConstaintsTest.java | 3 +- 23 files changed, 70 insertions(+), 172 deletions(-) diff --git a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/ActionUtils.java b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/ActionUtils.java index 393a4bd94..0b900cd92 100644 --- a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/ActionUtils.java +++ b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/ActionUtils.java @@ -19,9 +19,13 @@ package org.apache.wss4j.dom.action; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; + import org.apache.wss4j.common.ext.WSPasswordCallback; import org.apache.wss4j.common.ext.WSSecurityException; import org.apache.wss4j.dom.WSConstants; +import org.apache.wss4j.dom.handler.RequestData; public final class ActionUtils { @@ -67,4 +71,32 @@ public final class ActionUtils { return new WSPasswordCallback(username, reason); } + /** + * Configure a password callback (WSPasswordCallback object) from a CallbackHandler instance + * @param callbackHandler The CallbackHandler to use + * @param pwCb The WSPasswordCallback to supply to the CallbackHandler + * @param requestData The RequestData which supplies the message context + * @throws WSSecurityException + */ + public static void performPasswordCallback( + CallbackHandler callbackHandler, + WSPasswordCallback pwCb, + RequestData requestData + ) throws WSSecurityException { + + if (callbackHandler != null) { + Callback[] callbacks = new Callback[1]; + callbacks[0] = pwCb; + // + // Call back the application to get the password + // + try { + callbackHandler.handle(callbacks); + } catch (Exception e) { + throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, e, + "empty", new Object[] {"WSHandler: password callback failed"}); + } + } + } + } diff --git a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionDerivedAction.java b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionDerivedAction.java index ac305d1d8..4e7bfa160 100644 --- a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionDerivedAction.java +++ b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionDerivedAction.java @@ -58,7 +58,7 @@ public class EncryptionDerivedAction extends AbstractDerivedAction implements Ac } WSPasswordCallback pwCb = ActionUtils.constructPasswordCallback(encryptionToken.getUser(), WSConstants.DKT_ENCR); - handler.performPasswordCallback(callbackHandler, pwCb, reqData); + ActionUtils.performPasswordCallback(callbackHandler, pwCb, reqData); WSSecDKEncrypt wsEncrypt = new WSSecDKEncrypt(reqData.getSecHeader()); wsEncrypt.setIdAllocator(reqData.getWssConfig().getIdAllocator()); diff --git a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SAMLTokenSignedAction.java b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SAMLTokenSignedAction.java index b41111b3a..b8720ef1d 100644 --- a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SAMLTokenSignedAction.java +++ b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SAMLTokenSignedAction.java @@ -98,7 +98,7 @@ public class SAMLTokenSignedAction implements Action { } WSPasswordCallback pwCb = ActionUtils.constructPasswordCallback(signatureToken.getUser(), WSConstants.ST_SIGNED); - handler.performPasswordCallback(callbackHandler, pwCb, reqData); + ActionUtils.performPasswordCallback(callbackHandler, pwCb, reqData); wsSign.setUserInfo(signatureToken.getUser(), pwCb.getPassword()); diff --git a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SignatureAction.java b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SignatureAction.java index bfb24dddd..aab7506c5 100644 --- a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SignatureAction.java +++ b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SignatureAction.java @@ -53,7 +53,7 @@ public class SignatureAction implements Action { } WSPasswordCallback pwCb = ActionUtils.constructPasswordCallback(signatureToken.getUser(), WSConstants.SIGN); - handler.performPasswordCallback(callbackHandler, pwCb, reqData); + ActionUtils.performPasswordCallback(callbackHandler, pwCb, reqData); WSSecSignature wsSign = new WSSecSignature(reqData.getSecHeader()); wsSign.setIdAllocator(reqData.getWssConfig().getIdAllocator()); diff --git a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SignatureDerivedAction.java b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SignatureDerivedAction.java index cae496352..c170b34f9 100644 --- a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SignatureDerivedAction.java +++ b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/SignatureDerivedAction.java @@ -59,7 +59,7 @@ public class SignatureDerivedAction extends AbstractDerivedAction implements Act } WSPasswordCallback pwCb = ActionUtils.constructPasswordCallback(signatureToken.getUser(), WSConstants.DKT_SIGN); - handler.performPasswordCallback(callbackHandler, pwCb, reqData); + ActionUtils.performPasswordCallback(callbackHandler, pwCb, reqData); WSSecDKSign wsSign = new WSSecDKSign(reqData.getSecHeader()); wsSign.setIdAllocator(reqData.getWssConfig().getIdAllocator()); diff --git a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/UsernameTokenAction.java b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/UsernameTokenAction.java index fc90e1b21..39450d709 100644 --- a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/UsernameTokenAction.java +++ b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/UsernameTokenAction.java @@ -39,7 +39,7 @@ public class UsernameTokenAction implements Action { CallbackHandler callbackHandler = reqData.getCallbackHandler(); WSPasswordCallback pwCb = ActionUtils.constructPasswordCallback(reqData.getUsername(), WSConstants.UT); - handler.performPasswordCallback(callbackHandler, pwCb, reqData); + ActionUtils.performPasswordCallback(callbackHandler, pwCb, reqData); username = pwCb.getIdentifier(); password = pwCb.getPassword(); diff --git a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/UsernameTokenSignedAction.java b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/UsernameTokenSignedAction.java index dd3174083..138a58d10 100644 --- a/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/UsernameTokenSignedAction.java +++ b/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/UsernameTokenSignedAction.java @@ -52,7 +52,7 @@ public class UsernameTokenSignedAction implements Action { CallbackHandler callbackHandler = reqData.getCallbackHandler(); WSPasswordCallback pwCb = ActionUtils.constructPasswordCallback(reqData.getUsername(), WSConstants.UT_SIGN); - handler.performPasswordCallback(callbackHandler, pwCb, reqData); + ActionUtils.performPasswordCallback(callbackHandler, pwCb, reqData); if (reqData.getUsername() == null) { throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, "noUser"); diff --git a/ws-security-dom/src/main/java/org/apache/wss4j/dom/handler/WSHandler.java b/ws-security-dom/src/main/java/org/apache/wss4j/dom/handler/WSHandler.java index d54a7c9ee..7f01d3bfa 100644 --- a/ws-security-dom/src/main/java/org/apache/wss4j/dom/handler/WSHandler.java +++ b/ws-security-dom/src/main/java/org/apache/wss4j/dom/handler/WSHandler.java @@ -25,7 +25,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; -import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import org.apache.wss4j.dom.WSConstants; @@ -42,7 +41,6 @@ import org.apache.wss4j.common.crypto.CryptoFactory; import org.apache.wss4j.common.crypto.JasyptPasswordEncryptor; import org.apache.wss4j.common.crypto.PasswordEncryptor; import org.apache.wss4j.common.dom.message.WSSecHeader; -import org.apache.wss4j.common.ext.WSPasswordCallback; import org.apache.wss4j.common.ext.WSSecurityException; import org.apache.wss4j.common.util.Loader; import org.apache.wss4j.common.util.XMLUtils; @@ -1143,47 +1141,6 @@ public abstract class WSHandler { return passwordEncryptor; } - /** - * Configure a password callback (WSPasswordCallback object) from a CallbackHandler instance - * @param callbackHandler The CallbackHandler to use - * @param pwCb The WSPasswordCallback to supply to the CallbackHandler - * @param requestData The RequestData which supplies the message context - * @throws WSSecurityException - */ - public void performPasswordCallback( - CallbackHandler callbackHandler, - WSPasswordCallback pwCb, - RequestData requestData - ) throws WSSecurityException { - - if (callbackHandler != null) { - Callback[] callbacks = new Callback[1]; - callbacks[0] = pwCb; - // - // Call back the application to get the password - // - try { - callbackHandler.handle(callbacks); - } catch (Exception e) { - throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, e, - "empty", new Object[] {"WSHandler: password callback failed"}); - } - } else { - // - // If a callback isn't configured then try to get the password - // from the message context - // - String password = getPassword(requestData.getMsgContext()); - if (password == null) { - String err = "provided null or empty password"; - throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, - "empty", - new Object[] {"WSHandler: application " + err}); - } - pwCb.setPassword(password); - } - } - private void splitEncParts(boolean required, String tmpS, List<WSEncryptionPart> parts, RequestData reqData) throws WSSecurityException { @@ -1427,8 +1384,4 @@ public abstract class WSHandler { public abstract void setProperty(Object msgContext, String key, Object value); - - public abstract String getPassword(Object msgContext); - - public abstract void setPassword(Object msgContext, String password); } diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/common/CustomHandler.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/common/CustomHandler.java index 39b68ef2d..8023e203e 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/common/CustomHandler.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/common/CustomHandler.java @@ -67,18 +67,6 @@ public class CustomHandler extends WSHandler { return null; } - public void - setPassword(Object msgContext, String password) { - } - - public String - getPassword(Object msgContext) { - if (msgContext instanceof Map<?,?>) { - return (String)((Map<?,?>)msgContext).get("password"); - } - return null; - } - public void send( Document doc, RequestData reqData, diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/handler/SignatureConfirmationTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/handler/SignatureConfirmationTest.java index 5f64f64b8..959659b9c 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/handler/SignatureConfirmationTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/handler/SignatureConfirmationTest.java @@ -75,7 +75,7 @@ public class SignatureConfirmationTest { java.util.Map<String, Object> msgContext = new java.util.TreeMap<>(); msgContext.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true"); msgContext.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); - msgContext.put("password", "security"); + msgContext.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setMsgContext(msgContext); reqData.setUsername("16c73ab6-b892-458f-abf5-2f875f74882e"); @@ -116,7 +116,7 @@ public class SignatureConfirmationTest { java.util.Map<String, Object> msgContext = new java.util.TreeMap<>(); msgContext.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "false"); msgContext.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); - msgContext.put("password", "security"); + msgContext.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setMsgContext(msgContext); reqData.setUsername("16c73ab6-b892-458f-abf5-2f875f74882e"); @@ -155,7 +155,7 @@ public class SignatureConfirmationTest { java.util.Map<String, Object> msgContext = new java.util.TreeMap<>(); msgContext.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true"); msgContext.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); - msgContext.put("password", "security"); + msgContext.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setMsgContext(msgContext); reqData.setUsername("16c73ab6-b892-458f-abf5-2f875f74882e"); @@ -220,7 +220,7 @@ public class SignatureConfirmationTest { java.util.Map<String, Object> msgContext = new java.util.TreeMap<>(); msgContext.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true"); msgContext.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); - msgContext.put("password", "security"); + msgContext.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setMsgContext(msgContext); reqData.setUsername("16c73ab6-b892-458f-abf5-2f875f74882e"); @@ -320,7 +320,7 @@ public class SignatureConfirmationTest { java.util.Map<String, Object> msgContext = new java.util.TreeMap<>(); msgContext.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true"); msgContext.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); - msgContext.put("password", "security"); + msgContext.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setMsgContext(msgContext); reqData.setUsername("16c73ab6-b892-458f-abf5-2f875f74882e"); diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/handler/WSHandlerGetPasswordTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/handler/WSHandlerGetPasswordTest.java index 25a9e8b54..d747d1ec9 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/handler/WSHandlerGetPasswordTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/handler/WSHandlerGetPasswordTest.java @@ -23,14 +23,12 @@ import java.util.Collections; import org.apache.wss4j.common.util.SOAPUtil; import org.apache.wss4j.dom.WSConstants; -import org.apache.wss4j.dom.action.ActionUtils; import org.apache.wss4j.dom.common.CustomHandler; import org.apache.wss4j.dom.common.UsernamePasswordCallbackHandler; import org.apache.wss4j.dom.engine.WSSConfig; import org.junit.jupiter.api.Test; -import org.apache.wss4j.common.ext.WSPasswordCallback; import org.apache.wss4j.common.util.XMLUtils; import org.w3c.dom.Document; @@ -47,71 +45,6 @@ public class WSHandlerGetPasswordTest { org.slf4j.LoggerFactory.getLogger(WSHandlerGetPasswordTest.class); private CallbackHandler callbackHandler = new UsernamePasswordCallbackHandler(); - /** - * A unit test for WSHandler.getPassword(...), where the password is obtained - * from the Message Context. - */ - @Test - public void - testGetPasswordRequestContextUnit() throws Exception { - - final WSSConfig cfg = WSSConfig.getNewInstance(); - final RequestData reqData = new RequestData(); - reqData.setWssConfig(cfg); - java.util.Map<String, Object> messageContext = new java.util.TreeMap<>(); - messageContext.put("password", "securityPassword"); - reqData.setMsgContext(messageContext); - - WSHandler handler = new CustomHandler(); - CallbackHandler callbackHandler = - handler.getCallbackHandler("SomeCallbackTag", "SomeCallbackRef", reqData); - - WSPasswordCallback pwCb = ActionUtils.constructPasswordCallback("alice", WSConstants.UT); - handler.performPasswordCallback(callbackHandler, pwCb, reqData); - - assertTrue("alice".equals(pwCb.getIdentifier())); - assertTrue("securityPassword".equals(pwCb.getPassword())); - assertTrue(WSPasswordCallback.USERNAME_TOKEN == pwCb.getUsage()); - } - - /** - * A WSHandler test for WSHandler.getPassword(...), where the password is obtained - * from the Message Context. - */ - @Test - public void - testGetPasswordRequestContext() throws Exception { - - final WSSConfig cfg = WSSConfig.getNewInstance(); - final RequestData reqData = new RequestData(); - reqData.setWssConfig(cfg); - reqData.setUsername("alice"); - reqData.setPwType(WSConstants.PASSWORD_TEXT); - java.util.Map<String, Object> messageContext = new java.util.TreeMap<>(); - messageContext.put("password", "securityPassword"); - reqData.setMsgContext(messageContext); - - final java.util.List<Integer> actions = new java.util.ArrayList<>(); - actions.add(WSConstants.UT); - Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG); - CustomHandler handler = new CustomHandler(); - HandlerAction action = new HandlerAction(WSConstants.UT); - handler.send( - doc, - reqData, - Collections.singletonList(action), - true - ); - - String outputString = - XMLUtils.prettyDocumentToString(doc); - if (LOG.isDebugEnabled()) { - LOG.debug(outputString); - } - assertTrue(outputString.contains("alice")); - assertTrue(outputString.contains("securityPassword")); - } - /** * A test for WSHandler.getPassword(...), where the password is obtained from a * Callback Handler, which is placed on the Message Context using a reference. diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/PasswordTypeTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/PasswordTypeTest.java index ee3024a24..86eae1735 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/PasswordTypeTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/PasswordTypeTest.java @@ -167,7 +167,7 @@ public class PasswordTypeTest { RequestData reqData = new RequestData(); java.util.Map<String, Object> config = new java.util.TreeMap<>(); - config.put("password", "verySecret"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); config.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); reqData.setUsername("wernerd"); reqData.setMsgContext(config); diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureCertTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureCertTest.java index 7d1bd025b..edf622b52 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureCertTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureCertTest.java @@ -22,7 +22,7 @@ package org.apache.wss4j.dom.message; import org.apache.wss4j.common.util.SOAPUtil; import org.apache.wss4j.dom.WSConstants; import org.apache.wss4j.dom.common.CustomHandler; - +import org.apache.wss4j.dom.common.KeystoreCallbackHandler; import org.apache.wss4j.dom.engine.WSSConfig; import org.apache.wss4j.dom.engine.WSSecurityEngine; import org.apache.wss4j.common.dom.engine.WSSecurityEngineResult; @@ -244,7 +244,7 @@ public class SignatureCertTest { reqData.setUsername("wss40"); java.util.Map<String, String> config = new java.util.TreeMap<>(); config.put(WSHandlerConstants.SIG_PROP_FILE, "wss40.properties"); - config.put("password", "security"); + config.put(WSHandlerConstants.PW_CALLBACK_CLASS, KeystoreCallbackHandler.class.getName()); config.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference"); config.put(WSHandlerConstants.USE_SINGLE_CERTIFICATE, "false"); reqData.setMsgContext(config); diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignaturePartsTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignaturePartsTest.java index 00bacd880..2b52a6ae0 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignaturePartsTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignaturePartsTest.java @@ -26,6 +26,7 @@ import org.apache.wss4j.common.util.SOAPUtil; import org.apache.wss4j.common.WSDataRef; import org.apache.wss4j.dom.WSConstants; import org.apache.wss4j.dom.common.CustomHandler; +import org.apache.wss4j.dom.common.KeystoreCallbackHandler; import org.apache.wss4j.dom.common.SAML1CallbackHandler; import org.apache.wss4j.dom.engine.WSSConfig; @@ -599,6 +600,7 @@ public class SignaturePartsTest { config.put( WSHandlerConstants.SIGNATURE_PARTS, "{}{" + WSConstants.SIG_NS + "}KeyInfo" ); + config.put(WSHandlerConstants.PW_CALLBACK_REF, new KeystoreCallbackHandler()); reqData.setMsgContext(config); final Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG); diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureTest.java index 56f95ba4e..e0da72743 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignatureTest.java @@ -584,7 +584,7 @@ public class SignatureTest { reqData.setUsername("16c73ab6-b892-458f-abf5-2f875f74882e"); java.util.Map<String, Object> config = new java.util.TreeMap<>(); config.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); - config.put("password", "security"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); config.put( WSHandlerConstants.SIG_ALGO, "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" @@ -798,7 +798,7 @@ public class SignatureTest { java.util.Map<String, Object> config = new java.util.TreeMap<>(); config.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); - config.put("password", "security"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); config.put( WSHandlerConstants.SIGNATURE_PARTS, "{}{" + WSConstants.WSU_NS + "}Timestamp" ); @@ -841,7 +841,7 @@ public class SignatureTest { java.util.Map<String, Object> config = new java.util.TreeMap<>(); config.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); config.put(WSHandlerConstants.ENC_PROP_FILE, "crypto.properties"); - config.put("password", "security"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); config.put( WSHandlerConstants.SIGNATURE_PARTS, "{}{" + WSConstants.WSU_NS + "}Timestamp" ); @@ -880,7 +880,7 @@ public class SignatureTest { java.util.Map<String, Object> config = new java.util.TreeMap<>(); config.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); config.put(WSHandlerConstants.ENC_PROP_FILE, "crypto.properties"); - config.put("password", "security"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); config.put( WSHandlerConstants.SIGNATURE_PARTS, "{}{" + WSConstants.WSU_NS + "}Timestamp" ); @@ -918,7 +918,7 @@ public class SignatureTest { java.util.Map<String, Object> config = new java.util.TreeMap<>(); config.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); config.put(WSHandlerConstants.SIG_C14N_ALGO, WSConstants.C14N_WITH_COMMENTS); - config.put("password", "security"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setMsgContext(config); final Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG); @@ -970,7 +970,7 @@ public class SignatureTest { File propsFile = new File(basedir + "/src/test/resources/crypto.properties"); config.put(WSHandlerConstants.SIG_PROP_FILE, propsFile.getPath()); - config.put("password", "security"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setMsgContext(config); final Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG); diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignedBSTTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignedBSTTest.java index a08cf1624..cd262b9c6 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignedBSTTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/SignedBSTTest.java @@ -33,7 +33,7 @@ import org.apache.wss4j.common.util.SOAPUtil; import org.apache.wss4j.common.util.XMLUtils; import org.apache.wss4j.dom.WSConstants; import org.apache.wss4j.dom.common.CustomHandler; - +import org.apache.wss4j.dom.common.KeystoreCallbackHandler; import org.apache.wss4j.dom.engine.WSSConfig; import org.apache.wss4j.dom.engine.WSSecurityEngine; import org.apache.wss4j.dom.handler.HandlerAction; @@ -136,6 +136,7 @@ public class SignedBSTTest { WSHandlerConstants.SIGNATURE_PARTS, "{}{" + WSConstants.WSSE_NS + "}BinarySecurityToken" ); + config.put(WSHandlerConstants.PW_CALLBACK_REF, new KeystoreCallbackHandler()); reqData.setMsgContext(config); final Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG); diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/UsernameTokenTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/UsernameTokenTest.java index 7d19d0904..2b2578ec2 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/UsernameTokenTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/UsernameTokenTest.java @@ -814,8 +814,8 @@ public class UsernameTokenTest implements CallbackHandler { RequestData reqData = new RequestData(); java.util.Map<String, Object> config = new java.util.TreeMap<>(); - config.put("password", "verySecret"); config.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setUsername("wernerd"); reqData.setMsgContext(config); @@ -1109,10 +1109,10 @@ public class UsernameTokenTest implements CallbackHandler { RequestData reqData = new RequestData(); java.util.Map<String, Object> config = new java.util.TreeMap<>(); - config.put("password", "verySecret"); config.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); config.put(WSHandlerConstants.ADD_USERNAMETOKEN_NONCE, "true"); config.put(WSHandlerConstants.ADD_USERNAMETOKEN_CREATED, "true"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); reqData.setUsername("wernerd"); reqData.setMsgContext(config); diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/XOPAttachmentTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/XOPAttachmentTest.java index d46fc1fe8..0a403211f 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/XOPAttachmentTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/message/XOPAttachmentTest.java @@ -601,8 +601,8 @@ public class XOPAttachmentTest { config.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); config.put(WSHandlerConstants.ENC_PROP_FILE, "crypto.properties"); config.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference"); - config.put("password", "security"); config.put(WSHandlerConstants.STORE_BYTES_IN_ATTACHMENT, "true"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, new KeystoreCallbackHandler()); reqData.setMsgContext(config); final Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG); @@ -651,8 +651,8 @@ public class XOPAttachmentTest { config.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); config.put(WSHandlerConstants.ENC_PROP_FILE, "crypto.properties"); config.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference"); - config.put("password", "security"); config.put(WSHandlerConstants.STORE_BYTES_IN_ATTACHMENT, "true"); + config.put(WSHandlerConstants.PW_CALLBACK_REF, new KeystoreCallbackHandler()); reqData.setMsgContext(config); final Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG); diff --git a/ws-security-dom/src/test/java/org/apache/wss4j/dom/saml/SamlTokenCustomSignatureTest.java b/ws-security-dom/src/test/java/org/apache/wss4j/dom/saml/SamlTokenCustomSignatureTest.java index eff9fa062..d5c1c916e 100644 --- a/ws-security-dom/src/test/java/org/apache/wss4j/dom/saml/SamlTokenCustomSignatureTest.java +++ b/ws-security-dom/src/test/java/org/apache/wss4j/dom/saml/SamlTokenCustomSignatureTest.java @@ -35,6 +35,7 @@ import org.apache.wss4j.common.util.SOAPUtil; import org.apache.wss4j.common.util.XMLUtils; import org.apache.wss4j.dom.WSConstants; import org.apache.wss4j.dom.common.CustomHandler; +import org.apache.wss4j.dom.common.KeystoreCallbackHandler; import org.apache.wss4j.dom.common.SAML1CallbackHandler; import org.apache.wss4j.dom.engine.WSSConfig; @@ -119,13 +120,13 @@ public class SamlTokenCustomSignatureTest { Map<String, Object> config = new TreeMap<>(); config.put(WSHandlerConstants.SIG_PROP_FILE, "crypto.properties"); - config.put("password", "security"); config.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference"); config.put( WSHandlerConstants.SIGNATURE_PARTS, "{Element}{urn:oasis:names:tc:SAML:1.0:assertion}Assertion" ); config.put(WSHandlerConstants.SAML_CALLBACK_REF, callbackHandler); + config.put(WSHandlerConstants.PW_CALLBACK_REF, new KeystoreCallbackHandler()); reqData.setMsgContext(config); final Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG); diff --git a/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/AbstractTestBase.java b/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/AbstractTestBase.java index eaa9706fc..3a77de274 100644 --- a/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/AbstractTestBase.java +++ b/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/AbstractTestBase.java @@ -56,7 +56,6 @@ import org.apache.wss4j.common.ext.WSSecurityException; import org.apache.wss4j.common.util.SOAPUtil; import org.apache.wss4j.common.util.XMLUtils; import org.apache.wss4j.dom.WSConstants; - import org.apache.wss4j.dom.engine.WSSConfig; import org.apache.wss4j.dom.engine.WSSecurityEngine; import org.apache.wss4j.dom.handler.HandlerAction; @@ -191,7 +190,7 @@ public abstract class AbstractTestBase { sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.file", "transmitter.jks"); sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.password", "default"); //sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.alias", "transmitter"); - wss4JHandler.setPassword(messageContext, "default"); + messageContext.put(WSHandlerConstants.PW_CALLBACK_REF, new WSS4JCallbackHandlerImpl()); messageContext.put(WSHandlerConstants.SIG_PROP_REF_ID, "" + sigProperties.hashCode()); messageContext.put("" + sigProperties.hashCode(), sigProperties); @@ -200,7 +199,7 @@ public abstract class AbstractTestBase { encProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.file", "transmitter.jks"); encProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.password", "default"); //sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.alias", "transmitter"); - wss4JHandler.setPassword(messageContext, "default"); + messageContext.put(WSHandlerConstants.PW_CALLBACK_REF, new WSS4JCallbackHandlerImpl()); messageContext.put(WSHandlerConstants.ENCRYPTION_USER, "receiver"); messageContext.put(WSHandlerConstants.ENC_PROP_REF_ID, "" + encProperties.hashCode()); messageContext.put("" + encProperties.hashCode(), encProperties); @@ -213,9 +212,6 @@ public abstract class AbstractTestBase { RequestData requestData = new RequestData(); requestData.setMsgContext(messageContext); - if (messageContext.get(WSHandlerConstants.PW_CALLBACK_REF) == null) { - requestData.setCallbackHandler(new WSS4JCallbackHandlerImpl()); - } requestData.setWssConfig(WSSConfig.getNewInstance()); wss4JHandler.doSender(messageContext, requestData, true); @@ -607,17 +603,6 @@ public abstract class AbstractTestBase { ((Map<String, Object>) msgContext).put(key, value); } - @SuppressWarnings("unchecked") - @Override - public String getPassword(Object msgContext) { - return (String) ((Map<String, Object>) msgContext).get("password"); - } - - @SuppressWarnings("unchecked") - @Override - public void setPassword(Object msgContext, String password) { - ((Map<String, Object>) msgContext).put("password", password); - } } protected class TestSecurityEventListener implements SecurityEventListener { diff --git a/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureCRLTest.java b/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureCRLTest.java index 1dc007ef0..04347c762 100644 --- a/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureCRLTest.java +++ b/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureCRLTest.java @@ -32,6 +32,7 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.wss4j.common.ext.WSSecurityException; +import org.apache.wss4j.dom.common.KeystoreCallbackHandler; import org.apache.wss4j.dom.handler.RequestData; import org.apache.wss4j.dom.handler.WSHandlerConstants; import org.apache.wss4j.stax.ext.WSSConstants; @@ -149,7 +150,7 @@ public class SignatureCRLTest extends AbstractTestBase { sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.password", "security"); sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.alias", "wss40rev"); sigProperties.setProperty("org.apache.wss4j.crypto.merlin.x509crl.file", "keys/wss40CACRL.pem"); - wss4JHandler.setPassword(messageContext, "security"); + messageContext.put(WSHandlerConstants.PW_CALLBACK_REF, new KeystoreCallbackHandler()); messageContext.put(WSHandlerConstants.SIG_PROP_REF_ID, "" + sigProperties.hashCode()); messageContext.put("" + sigProperties.hashCode(), sigProperties); diff --git a/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureCertConstaintsTest.java b/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureCertConstaintsTest.java index 8c5705674..252be73e6 100644 --- a/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureCertConstaintsTest.java +++ b/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureCertConstaintsTest.java @@ -34,6 +34,7 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.wss4j.common.ext.WSSecurityException; +import org.apache.wss4j.dom.common.KeystoreCallbackHandler; import org.apache.wss4j.dom.handler.RequestData; import org.apache.wss4j.dom.handler.WSHandlerConstants; import org.apache.wss4j.stax.ext.WSSConstants; @@ -184,8 +185,8 @@ public class SignatureCertConstaintsTest extends AbstractTestBase { sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.file", "keys/wss40.jks"); sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.password", "security"); sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.alias", "wss40"); - wss4JHandler.setPassword(messageContext, "security"); messageContext.put(WSHandlerConstants.SIG_PROP_REF_ID, "" + sigProperties.hashCode()); + messageContext.put(WSHandlerConstants.PW_CALLBACK_REF, new KeystoreCallbackHandler()); messageContext.put("" + sigProperties.hashCode(), sigProperties); Enumeration<?> enumeration = properties.propertyNames(); diff --git a/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureIssuerCertConstaintsTest.java b/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureIssuerCertConstaintsTest.java index 5392e9ce0..b082fce5f 100644 --- a/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureIssuerCertConstaintsTest.java +++ b/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/SignatureIssuerCertConstaintsTest.java @@ -34,6 +34,7 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.wss4j.common.ext.WSSecurityException; +import org.apache.wss4j.dom.common.KeystoreCallbackHandler; import org.apache.wss4j.dom.handler.RequestData; import org.apache.wss4j.dom.handler.WSHandlerConstants; import org.apache.wss4j.stax.ext.WSSConstants; @@ -184,7 +185,7 @@ public class SignatureIssuerCertConstaintsTest extends AbstractTestBase { sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.file", "keys/wss40.jks"); sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.password", "security"); sigProperties.setProperty("org.apache.wss4j.crypto.merlin.keystore.alias", "wss40"); - wss4JHandler.setPassword(messageContext, "security"); + messageContext.put(WSHandlerConstants.PW_CALLBACK_REF, new KeystoreCallbackHandler()); messageContext.put(WSHandlerConstants.SIG_PROP_REF_ID, "" + sigProperties.hashCode()); messageContext.put("" + sigProperties.hashCode(), sigProperties);