> Date: Fri, 12 Dec 2014 12:45:51 +0100
> From: j.s...@fz-juelich.de
> To: java-user@axis.apache.org
> Subject: axis2 rampart
> 
> hi,
MG>Guten Tag
> 
> i tried to authenticate soap service users against an microsoft active
> directory.
> is it possible within the CallbackHandler to get the password provided
> by the user within the soap message?
> 
> i read something about getUsage==USERNAME_TOKEN_UNKOWN but i do not know
> the settings in rampart to get axis call the callback in this way. (in
> this case the password sould be provided by WSPasswordCallback.getPassword)
> 
> i also tried to get a MessageContext within the callback routine. but
> this is not possible. the result of getCurrentMessageContext is null.
MG>public class TestCBHandler implements 
javax.security.auth.callback.CallbackHandler{
MG>  public void handle(javax.security.auth.callback.Callback[] callbacks) 
throws IOException, javax.security.auth.callback.UnsupportedCallbackException
{
        for (javax.security.auth.callback.Callback callback : callbacks) {
            if (callback instanceof org.apache.ws.security.WSPasswordCallback) {
                org.apache.ws.security.WSPasswordCallback pc = 
(org.apache.ws.security.WSPasswordCallback) callback;
                /*
                * This usage type is used only in case we received a
                * username token with a password of type PasswordText or
                * an unknown password type.
                *
                * This case the WSPasswordCallback object contains the
                * identifier (aka username), the password we received, and
                * the password type string to identify the type.
                *
                * Here we perform only a very simple check.
                */
                if (pc.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) 
{
                    if (pc.getIdentifier().equals("Username") ) { //default is 
Username
                        return;
                    }
                    if (pc.getPassword().equals("Password")) { //default is 
Password
                        return;
                    }
                    throw new 
javax.security.auth.callback.UnsupportedCallbackException(callback,"check 
failed");
                }
MG>then in your rampartConfig
<wsp:Policy wsu:Id="5" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
 xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
    <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy";> 
        <ramp:user>UnencryptedUsername</ramp:user>
        <ramp:encryptionUser>Username</ramp:encryptionUser>
        
<ramp:passwordCallbackClass>org.apache.rampart.TestCBHandler</ramp:passwordCallbackClass>
        
        <ramp:signatureCrypto>
<!-- merlin  only supports keys < 1024b...if you want stronger go with 
bouncycastle -->
            <ramp:crypto 
provider="org.apache.ws.security.components.crypto.Merlin">
                <ramp:property 
name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
<!-- make sure the jks exists and the password for this jks matches the 
password below -->
                <ramp:property 
name="org.apache.ws.security.crypto.merlin.file">test-resources/keys/interop2.jks</ramp:property>
<!-- here is the password which must match the password from the above .jks -->
                <ramp:property 
name="org.apache.ws.security.crypto.merlin.keystore.password">Password</ramp:property>
            </ramp:crypto>
        </ramp:signatureCrypto>
    </ramp:RampartConfig>
> 
> thanks in advance
> 
> 
> gruss juergen
> 
MG>mit freundlichen grüßen
MG>Martin
> 
> 
                                          

Reply via email to