IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Apache CXF et WS-Security


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Par défaut Apache CXF et WS-Security
    Bonjour,

    J'ai développé un petit WS avec Apache CXF 2.2.8.

    Le client et le serveur "de base" fonctionnent :

    Du coup j'ai attaqué l'étape "sécuriser les échanges" en utilisant WS-Security (en utilisant les certificats X509). Je pars sur un scénario authentification mutuel histoire de blinder le truc.

    J'ai commencé par la signature des requêtes et plus particulièrement la signature de la réponse du serveur (faut bien commencer par un bout).

    le serveur :

    <jaxws:endpoint id="soapServer" implementor="#myServiceImpl" address="/myService" publish="true">
    <jaxws:outInterceptors>
    <ref bean="signResponse"/>
    </jaxws:outInterceptors>
    </jaxws:endpoint>

    <bean id="signResponse" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
    <constructor-arg>
    <map>
    <entry key="action" value="Signature"/>
    <entry key="user" value="ServerKeyAlias"/>
    <entry key="signaturePropFile" value="ServerJKS.properties"/>
    <entry key="passwordCallbackClass" value="com.MyServerPasswordCallback"/>
    <entry key="signatureParts" value="{myResponseElement}{http://schemas.xmlsoap.org/soap/envelope/}Body"/>
    </map>
    </constructor-arg>
    </bean>

    le client :

    <jaxws:client id="soapClient" serviceClass="com.MyService" address="/myService" serviceName="myService">
    </jaxws:client>

    Cette première partie fonctionne. Je reçois bien la réponse avec signature du serveur.
    Par contre il n'y a aucune vérification de part et d'autre (normal je n'ai rien mis encore).


    Du coup je me suis dit que j'allais faire la même chose côté client (c.a.d) signer la requête pour le serveur...

    Petite modif du client...

    <jaxws:client id="soapClient" serviceClass="com.MyService" address="/myService" serviceName="myService">
    <jaxws:outInterceptors>
    <ref bean="signRequest"/>
    </jaxws:outInterceptors>
    </jaxws:client>

    <bean id="signRequest" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
    <constructor-arg>
    <map>
    <entry key="action" value="Signature"/>
    <entry key="user" value="ClientKeyAlias"/>
    <entry key="signaturePropFile" value="ClientJKS.properties"/>
    <entry key="passwordCallbackClass" value="com.MyClientPasswordCallback"/>
    <entry key="signatureParts" value="{myRequestElement}{http://schemas.xmlsoap.org/soap/envelope/}Body"/>
    </map>
    </constructor-arg>
    </bean>

    Je lance les tests et là côté serveur j'ai une erreur

    Ce qui est bizarre c'est que j'ai tout de même la signature avec l'erreur...

    <soap:Enveloppe>
    Signature
    ...
    <soap:Body>
    <soap:Fault>
    <faultcode>soap:MustUnderstand</faultcode>
    <faultstring>MustUnderstand headers: [{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] are not understood.</faultstring>
    </soap:Fault>
    </soap:Body>
    </soap:Enveloppe>
    ...

    Visiblement ça le chagrine de voir arriver un message signé et sans la vérif d'activée.
    En fouillant on voit dans le header de la requête lorsque c'est signé :
    <wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    J'imagine que ça a avoir qq chose.

    En rajoutant la vérification de la signature au moins côté serveur ça fonctionne.

    Ce que je ne comprend pas, pourquoi donc la vérification gène côté serveur alors que côté client ça ne gène pas de ne pas la faire ??? Alors que visiblement y'a le même header dans le SOAP.

    J'ai lu qu'on pouvait setter des propriétés côté endpoint pour modifier le comportement,
    mais la doc n'est pas exhaustive sur ces points.

    Avez-vous déjà expérimenté ces problèmes ?
    Est-ce que certains d'entre vous ont une explication pourquoi côté serveur ça emmerde et pas côté client ?

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 336
    Par défaut
    Bonjour,

    peut-être une piste par là : http://forums.java.net/jive/message....ssageID=226221 ?

    Karl3i.

Discussions similaires

  1. [Apache CXF] message xml soap réponse sans CDATA
    Par thierry_b dans le forum Services Web
    Réponses: 0
    Dernier message: 08/10/2009, 11h28
  2. Web services avec apache CXF
    Par bendf82 dans le forum Services Web
    Réponses: 1
    Dernier message: 18/08/2008, 11h14
  3. [Apache CXF] Pb pour tester les exemples
    Par FlorentBVN dans le forum Services Web
    Réponses: 1
    Dernier message: 26/03/2008, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo