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

XML/XSL et SOAP Discussion :

Problème d'authentification / Requete wdsl Soap


Sujet :

XML/XSL et SOAP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Problème d'authentification / Requete wdsl Soap
    Bonjour à tous,

    je cherche a créer un appel vers un webservice (wsdl/soap), mais je bute sur un soucis pour m'authentifier. C'est la première fois que j'utilise ce genre d'appel et de syntaxe, et malgré pas mal de temps passé sur les forums et autres, je n'ai malheureusement pas trouvé la solution. J'ai essayé plusieurs méthodes sans succès.
    Voici le code que j'utilise :

    Méthode 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $client_url = 'http://server.com/applicatifs.wsdl';
    $options['exceptions'] = TRUE;
    $options['trace'] = TRUE;
    $client = new SoapClient($client_url, $options);
    $headers = new SoapHeader("http://www.llnw.com/Reporting","AuthHeader",array("Username"=>"login","Password"=>"password"));
    $response = $client->__soapCall("operation",array('valeur'),NULL,$headers);
    J'obtiens un "Accès refusé".

    Méthode 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    $client_url = 'http://server.com/applicatifs.wsdl';
    $options['exceptions'] = TRUE;
    $options['trace'] = TRUE;
    $client = new SOAPClient($client_url, $options);
    $username = 'login';
    $password = 'password';
    $wsse_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
    $security = new SoapVar(
    						  array(new SoapVar(
    							array(
    							  new SoapVar($username, XSD_STRING, NULL, NULL, 'username', $wsse_ns),
    							  new SoapVar($password, XSD_STRING, NULL, NULL, 'password', $wsse_ns),
    							),
    							SOAP_ENC_OBJECT,
    							NULL,
    							NULL,
    							'UsernameToken',
    							$wsse_ns
    							)),
    						  SOAP_ENC_OBJECT
    						);
    $headers[] = new SoapHeader($wsse_ns, 'Security', $security, FALSE);
    $client->__setSoapHeaders($headers);
    $response = $client->__soapCall("operation",array('valeur'));
    De même, accès refusé.

    Voici le schéma du wdsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <wsdl:types xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://server.com/">
          <xsd:complexType name="AuthHeader">
            <xsd:sequence>
              <xsd:element name="username" type="xsd:string"/>
              <xsd:element name="password" type="xsd:string"/>
            </xsd:sequence>
          </xsd:complexType>
          <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="AuthHeaderElement" type="tns:AuthHeader"/>
        </xsd:schema>
      </wsdl:types>
    Voici le schéma de l'opération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Operation type:Request-response. The endpoint receives a message, and sends a correlated message.
         SOAP action:http://server.com/operation
              Input:operationRequest (soap:body, use = literal, part = AuthHeader)
                   AuthHeader type AuthHeaderElement
                        username type string
                        password type string
                   valeur type int
             Output:operationResponse (soap:body, use = literal, part = AuthHeader)
                  AuthHeader type AuthHeaderElement
                        username type string
                        password type string
                 result type string
    Voilà pour les infos. Avez vous une idée pour résoudre ce soucis d'authentification lorsque je lance une requête ?
    Merci pour votre aide.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si on veut faire déguiser les données vraies - et c'est normal - il faut faire d'une façon cohérente pour que l'histoire racontée soit elle-même cohérente.

    Je ne vois pas où défini le préfixe tns, et je suppose pour le travail qu'il soit défini comme xmlns:tns="http://server.com/". Et puis, d'où vient le namespace "http://www.llnw.com/Reporting" : c'est incompréhensible ... Edition: Et puis, username et password soient sensible aux cases, il faut respecter leur écriture exacte.

    Et tout cas, avec l'hypothèse mentionnée ci-dessus, on peut essayer comme ceci:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //$headers = new SoapHeader("http://www.llnw.com/Reporting","AuthHeader",array("Username"=>"login","Password"=>"password"));
    $headers = new SoapHeader("http://server.com/","AuthHeaderElement",array("username"=>"login","password"=>"password"));
    Voilà !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour tsuji,

    votre code pour le header semble fonctionner. J'obtiens donc bien les données en retour à ma demande et n'ai plus de soucis d'authentification.
    Je comprends mieux la syntaxe a utiliser via votre retour.

    Merci encore pour votre aide !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec une requete SOAP
    Par Mister_Kp dans le forum Services Web
    Réponses: 0
    Dernier message: 26/08/2010, 17h27
  2. [Web Service][SOAP] Problème d'authentification
    Par Maelenkolix dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 13/08/2009, 08h55
  3. [Web Service][SOAP] WebService : problème d'authentification
    Par SuperGilou dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 11/06/2007, 15h16
  4. [Update] Problème ds ma requete
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2005, 11h28
  5. Problème de sous-requete.
    Par Oberown dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2004, 16h44

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