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 chevronné
    Inscrit en
    octobre 2011
    Messages
    1 013
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 013
    Points : 1 755
    Points
    1 755

    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 Web Services
    Réponses: 0
    Dernier message: 26/08/2010, 17h27
  2. [SOAP] Problème d'authentification
    Par Maelenkolix dans le forum Services Web
    Réponses: 8
    Dernier message: 13/08/2009, 08h55
  3. [SOAP] WebService : problème d'authentification
    Par SuperGilou dans le forum Services Web
    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