Hello,

I try to set up a Soap transaction with wss4j 1.5.4 and Axis (1.4 or 1.2)
using a UsernameToken password.
The trouble is that the request is processed even with a bad user or
password in PasswordText mode.

I spent much time changing parameters or jar, reading documentation and
searching the web, but I found nothing.
Can anyone help? I am sure the solution must be quite simple, but it is the
first time I use wss4j ...
Thanks.

Daph

Here is all information about this project.

I did the following tests:
-       without soapenv header the request is rejected (WSDoAllReceiver: Request
does not contain required Security header)
-       in PasswordDigest mode all requests are rejected, even with correct
user/password (WSSecurityException: The security token could not be
authenticated or authorized)

At first I try to use the PasswordText mode, and here is my
server-config.wsdd file (I changed some namespaces and names):
<deployment    xmlns="http://xml.apache.org/axis/wsdd/";   
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";>
 <globalConfiguration>
  <parameter name="sendMultiRefs" value="true"/>
  <parameter name="disablePrettyXML" value="true"/>
  <parameter name="adminPassword" value="admin"/>
  <parameter name="attachments.Directory" value="/exec/jonas/v486/webapps"/>
  <parameter name="dotNetSoapEncFix" value="true"/>
  <parameter name="enableNamespacePrefixOptimization" value="false"/>
  <parameter name="sendXMLDeclaration" value="true"/>
  <parameter name="attachments.implementation"
value="org.apache.axis.attachments.AttachmentsImpl"/>
  <parameter name="sendXsiTypes" value="true"/>
  <requestFlow>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="session"/>
   </handler>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="request"/>
    <parameter name="extension" value=".jwr"/>
   </handler>
  <handler type="java:org.apache.ws.axis.security.WSDoAllReceiver" >
      <parameter name="passwordCallbackClass"
value="com.myAppli.ws.PWCallback"/>
      <parameter name="action" value="UsernameToken"/>
      <parameter name="user" value="user"/>
      <parameter name="passwordType" value="PasswordDigest"/>
      <!--<parameter name="passwordType" value="PasswordText"/>-->
   </handler>
  </requestFlow>
 </globalConfiguration>
 <handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder"/>
 <handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper"/>

  <!-- Services from WSDL -->
  <service name="ExternalManagementPort" provider="java:RPC" style="wrapped"
use="literal">
      <parameter name="wsdlTargetNamespace" value="uri://myAppli/1.0"/>
      <parameter name="wsdlServiceElement"
value="ExternalManagementService"/>
      <parameter name="schemaQualified" value="urn:com.serviceconf"/>
      <parameter name="schemaUnqualified"
value="uri://myAppli/-xp/types/1.0,uri://myAppli/1.0,uri://myAppli/types/1.0"/>
      <parameter name="wsdlServicePort" value="ExternalManagementPort"/>
      <parameter name="className"
value="com.myAppli.messages.ExternalManagementSoapBindingSkeleton"/>
      <parameter name="wsdlPortType" value="ExternalManagement"/>
      <parameter name="typeMappingVersion" value="1.2"/>
      <parameter name="allowedMethods" value="*"/>
…
<transport name="http">
  <requestFlow>
   <handler type="URLMapper"/>
   <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
  </requestFlow>
  <parameter name="qs:list"
value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs:wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler"/>
  <parameter name="qs.list"
value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs.method"
value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs:method"
value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs.wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler"/>
 </transport>
 <transport name="local">
  <responseFlow>
   <handler type="LocalResponder"/>
  </responseFlow>
 </transport>
</deployment>


And the PWCallback class (logs are processed):
package com.myAppli.ws;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.log4j.Logger;
import org.apache.ws.security.WSPasswordCallback;
import org.apache.axis.MessageContext;
import org.apache.axis.message.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;

public class PWCallback implements CallbackHandler {
        private static Logger logger =
Logger.getLogger(PWCallback.class.getName());
        public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {

        logger.debug("Inside PWCallback.handle");
        for (int i = 0; i < callbacks.length; i++) {
                if (callbacks[i] instanceof WSPasswordCallback) {
                        WSPasswordCallback pc = (WSPasswordCallback) 
callbacks[i];
                        String user = pc.getIdentifer();
                        pc.setPassword("testpass");
                        logger.debug("Callback found, usage " + pc.getUsage() + 
", user "
+ user);
                } else {
                        throw new UnsupportedCallbackException(callbacks[i], 
"Unrecognized
Callback");
                }
        }
        }
}

The request (sent with soap-ui for testing) looks like:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:urn="urn:gccsca.francetelecom.com.serviceconf">
   <soapenv:Header>
      <wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";>
         <wsse:UsernameToken>
            <wsse:Username>SLSd</wsse:Username>
            <wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText";>testpasstttt</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
   </soapenv:Header>
   <soapenv:Body>

The application is deployed through Jonas (v4.8.6 on linux RedHat 5, or
v4.9.2 on Windows XP).

I put also here a list of jar files included in the war. I am not sure of
all versions (except those for wss4j). Maybe it can help …
At first I used Axis 1.2, I tried to update to Axis 1.4, then I added some
other jar files that could be used.
activation.jar - addressing-1.0.jar
axis-1.4.jar - axis-ant-1.4.jar - axis-jaxrpc-1.4.jar - axis-saaj-1.4.jar
bcprov-jdk13-132.jar
classes12.jar
commons-beanutils.jar - commons-codec-1.3.jar - commons-collections.jar -
commons-discovery-0.2.jar - commons-httpclient-3.0-rc2.jar
commons-lang.jar - commons-logging-1.0.4.jar - commons-pool.jar -
commons-validator.jar
dom4j.jar
junit-3.8.1.jar - log4j-1.2.9.jar
mail.jar - opensaml-1.0.1.jar
optional.jar - ostermillerutil.jar - regexp.jar
serializer-2.7.0.jar - wsdl4j-1.5.1.jar - wss4j-1.5.4.jar
xalan-2.7.0.jar - xercesImpl.jar - xml-apis.jar - xmlParserAPIs.jar -
xmlsec-1.4.0.jar

-- 
View this message in context: 
http://www.nabble.com/WSSE-UsernameToken%3A-accepts-all-user-password-tp19535971p19535971.html
Sent from the WSS4J mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to