From: brianreinh...@lampreynetworks.com
To: java-dev@axis.apache.org
Subject: RE: Rampart STS Username service not returning password in callback
Date: Sat, 19 Jan 2013 08:58:15 -0500
Hi Martin, I did something different. The problem is in WSS4J. In the
UsernameTokenValidation file I simply passed the password to the callback
constructor which was previously null. Now I have to change the approach a
little bit. In my handler I read the password, do my hash, and if it matches my
stored hash I do nothing since the password is already set. This will cause
WSS4J to accept the message. If it doesn’t match I set the password to current
password + “bad” just to make it different causing the message to be rejected.
I don’t like it but I really saw no other choice and don’t understand why WSS4J
didn’t give the choice. They could have added another variable ‘rawPassword’
and a getter for it. This would allow the service to use the raw password for
whatever purpose it needs. The user would still set ‘password’ as expected by
WSS4J.MG>take a look at the
org.apache.ws.security.dom.message.WSSecUsernameToken getSecretKeyMG>/**
* getSecretKey
*
* After the <code>prepare()</code> method was called use this method
* to compute a derived secret key. If "useDerivedKey" is set, then the
returned secret
* key is derived as per the UsernameToken 1.1 specification. Otherwise,
the generation
* of this secret key is according to the WS-Trust specifications.
*
* @return Return the derived secret key of this token or null if
<code>prepare()</code>
* was not called before.
*/MG>boolean useDerivedKey is set to false initially so the secretKey
coming back from WSS4J is a WS-Trust compliant secretKey
MG>setting plain text Password can be accomplished with
MG>setPasswordType(WSConstants#PASSWORD_TEXT)
MG>setPasswordsAreEncoded(false)
MG>the prepare method sets the password into the UsernameToken object (in the
prepare method)MG>ut.setPassword(password); It works and I can store passwords
as hashes and be interoperable with the WS-Trust standard.MG>you have a
solution..and thats all that matters
MG>congrats on acquiring a WS-Trust solution!..i hope the journey was pleasant
and as informative for you as it was for me BrianMG>Martin From: Martin
Gainty [mailto:mgai...@hotmail.com]
Sent: Friday, January 18, 2013 11:24 PM
To: java-dev@axis.apache.org
Subject: RE: Rampart STS Username service not returning password in callback Hi
Brian
assume your CallbackHandler looks something like like
public class PWCBHandler implements
javax.security.auth.callback.CallbackHandler {
public void handle(javax.security.auth.callback.Callback[] callbacks)
throws IOException,
javax.security.auth.callback.UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
org.apache.ws.security.WSPasswordCallback pwcb =
(org.apache.ws.security.WSPasswordCallback)callbacks[i];
put the CallbackHandler into the Options class for the serviceClient to pickup
e.g.
Options options = client.getOptions();
options.put(WSHandlerConstants.PW_CALLBACK_REF, new PasswordCallbackHandler());
serviceClient.setOptions(options);
try {
//Blocking invocation
serviceClient.sendReceive(getOMElement());
fail("Service Should throw an error..");
} catch (AxisFault axisFault) {
assertEquals("Testing negative scenarios with Apache
Rampart. Intentional Exception", axisFault.getMessage());
}
http://wso2.org/library/3733
HTH,
Martin
______________________________________________
Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger
sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung
oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem
Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung.
Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung
fuer den Inhalt uebernehmen.Ce message est confidentiel et peut être
privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec
bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non
autorisée ou la copie de ceci est interdite. Ce message sert à l'information
seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant
donné que les email peuvent facilement être sujets à la manipulation, nous ne
pouvons accepter aucune responsabilité pour le contenu fourni.
From: brianreinh...@lampreynetworks.com
To: java-dev@axis.apache.org
Subject: RE: Rampart STS Username service not returning password in callback
Date: Fri, 18 Jan 2013 12:01:19 -0500Martin, Can you tell me where the password
callback in my service gets called from? It’s the password callback configured
by the following line in the STS service.xml
<ramp:passwordCallbackClass>com.lni.exchange.wan.receive.binding.axis2.PasswordCallback</ramp:passwordCallbackClass>
Brian From: Martin Gainty [mailto:mgai...@hotmail.com]
Sent: Wednesday, January 16, 2013 5:14 PM
To: java-dev@axis.apache.org
Subject: RE: Rampart STS Username service not returning password in callback
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
i think I found an element we can use
(where both noonce and Password would be child elements of wsc:DerivedKeyToken)
so here is the TestCase
org.apache.rampart.handler.config.OutflowConfiguration ofc = new
org.apache.rampart.handler.config.OutflowConfiguration();
ofc.setActionItems("UsernameToken Encrypt");
ofc.setUser("Mohammed");
ofc.setAddUTElements("Nonce Created"); //Noonce
ofc.setEncryptionParts("{Element}{" + WSSE_NS + "}UsernameToken");
ofc.setEncryptionUser("osama");
ofc.setEncryptionPropFile("interop.properties");
ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES); //change this to MD5
or SHA-1
ofc.setPasswordType(WSConstants.PW_TEXT);
ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
//so here is the new OutFlowConfiguration Element
ofc.setPassword("YadaYadaYada");
return ofc;
//org.apache.rampart.handler.config.OutflowConfiguration change
public void setPassword(String passwordType) {
this.actionList[this.currentAction].put(
WSHandlerConstants.PASSWORD, password);
}
//org.apache.ws.security.dom.handler.WSHandlerConstants add this element
public static final String PASSWORD = "password"
//correct ...why touch WSS4J for one minor update to a constant ..(maybe using
constant "password" is better)
//org.apache.rampart.handler.config.OutflowConfiguration change with constant
public void setPassword(String passwordType) {
this.actionList[this.currentAction].put(
"password", password);
}
reference
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
WDYT?
Martin
></xsd:No virus found in this message.
Checked by AVG - www.avg.com
Version: 2013.0.2890 / Virus Database: 2638/6037 - Release Date: 01/16/13No
virus found in this message.
Checked by AVG - www.avg.com
Version: 2013.0.2890 / Virus Database: 2638/6037 - Release Date: 01/16/13No
virus found in this message.
Checked by AVG - www.avg.com
Version: 2013.0.2890 / Virus Database: 2639/6041 - Release Date: 01/18/13No
virus found in this message.
Checked by AVG - www.avg.com
Version: 2013.0.2890 / Virus Database: 2639/6041 - Release Date: 01/18/13