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

Bibliothèques et frameworks PHP Discussion :

[Web Service][SOAP] ServiceWeb et sécurité PHP5


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 8
    Points
    8
    Par défaut [Web Service][SOAP] ServiceWeb et sécurité PHP5
    Bonjour,

    Je viens de réaliser un service web en php5 avec un fichier wsdl .... jusque la tout fonctionne bien.

    Maintenant je souhaiterais sécuriser un peu l'accès à ce service mais la je sèche .
    Je souhaiterais le faire soit via un login/mot de passe soit via une certificat avec clé privé. Ou bien sur soit avec une autre méthode si vous avez une meilleure idée.

    Je ne trouve aucune doc sur ce sujet est-ce possible de le faire en PHP5 ?

    Merci de votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Bonjour.

    Je n'ai jamais eu besoin de sécuriser du WebService, donc je ne peux pas trop t'aider. Mais je sais qu'il est possible d'effectuer une authentification par le header d'une requête SOAP.
    Cette page peut surement t'aider, surtout avec les exemples des autres utilisateurs :
    http://fr.php.net/manual/fr/function...-construct.php

    Sinon tu peux simplement faire une méthode avec login / mdp en paramètres. Et le serveur te laisse accéder aux autres méthodes pendant x temps. Mais bon c'est assez bancal comme méthode.

    Bon courage

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 8
    Points
    8
    Par défaut
    Salut,

    Merci pour ton conseil c'est en effet par la qu'il fallait s'orienter.

    J'ai résolu mon problème et je partage ma réponse on sait jamais ça peut aider :

    En fait il faut créer une fonction d'authentification avec login mp du cotès service web qui mettra un attribut de la classe du service à vrai :

    exemple simple :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    class monWebService {
     
     
        private $auth = FALSE ;
     
    	//////////////////::FONCTION POUR AUTHENTIFICATION    /////////////:
        	public function authUser($login,$password)
    	{
    		if($password == 'test' && $login == 'toto' )
    		{
    			$this->auth = true;
    		 }
    		else
    		{
    			$this->auth = false;
    		}
    	}
    ///ENSUITE IL FAUT VÉRIFIER DANS CHAQUE FONCTION PUBLIÉE QUE L'AUTH EST OK AU CAS OU UNE PERSONNE VOUDRAIT PASSER SANS ENVOYER LES HEADERS :
     
    public function getWsInfo() 
       {
    	if(!$this->auth)
    	{
     
             	exit();
    		//OU renvoie une erreur :) c'est plus propre mais c'est un exemple
     
    	}
     
        	 $information = "Servce web de demonstration";
        	 $version = "1.0";
     
             return array('date' => date('Y-m-d\TH:i:s O'),'information'=>$information  ,'version'=>$version);
     
       }
    }

    Ensuite cotés client on peut l'appeler à l'aide de la fonction SoapHeader de php :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    //Il faut lui passer les paramètres sous la forme d'un objet donc obligé de créer une classe pour le login mp :
     
    class SoapHeaderAuthUser
    {	
        public $login;
        public $password;
     
        public function __construct($l, $p)
        {
            $this->login = $l;
    	$this->password = $p;        
        }
    }
     
    $espaceDeNom = 'http://espacedenomvalide';
    $loginpassword = new SoapHeaderAuthUser("toto", "test");
     
    //Ci dessous 'authUser' est la fonction qui fait  l'authentification
    $soapHeaders[] = new SoapHeader($espaceDeNom, 'authUser', $loginpassword);
     
     
    $fonction="getWsInfo";
    //Parametre
    $param = array('value'=>0);
     
    // Nouvelle instance de la classe soapClient
    $client = new SoapClient('http://chemin/vers/fichier/.wsdl', array('trace'=> 1, 'soap_version'=> SOAP_1_1));
     
    echo "Appel de la fonction $fonction......<br/><br/>";
     
    //Affichage du message :
    $affichage .=  utf8_decode($wsReponse->information);
     
    //ENVOI DES HEADERS POUR L'AUTHENTIFICATION :
    $client->__setSoapHeaders( $soapHeaders );
     
    //APPEL DU SERVICE WEB ET DE LA FONCTION DEMANDEE
     
    $wsReponse =  $client->__call($fonction,$param);	
     
    $affichage .="	 <div id='contenu'><br/><br/>";
     
    $affichage .= "date : ". $wsReponse->date;
    $affichage .= "<br /> info : ". $wsReponse->information;
    $affichage .= "<br /> version : ".$wsReponse->version;
     
    $affichage .= "</div>";
     
    echo $affichage;
    Voila en espérant que cela pourra aider quelqu'un

    Bonne journée

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Merci à toi, ca aidera surement du monde (et surement moi!)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 34
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Je sais que le sujet date un peu mais il semble qu'il y ait une erreur dans la méthode authUser() de la classe monWebService donc je me permets de corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function authUser($auth)
    {
        if($auth->password == 'test' && $auth->login == 'toto')
        {
            $this->auth = true;
        }
        else
        {
            $this->auth = false;
        }
    }
    L'argument $auth correspond en fait à l'instance SoapHeaderAuthUser qui a été passé à la méthode __setSoapHeaders du client :

    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
    class SoapHeaderAuthUser
    {	
        public $login;
        public $password;
     
        public function __construct($l, $p)
        {
            $this->login = $l;
    	$this->password = $p;        
        }
    }
     
    $espaceDeNom = 'http://espacedenomvalide';
    $loginpassword = new SoapHeaderAuthUser("toto", "test");
    $soapHeaders[] = new SoapHeader($espaceDeNom, 'authUser', $loginpassword);
     
    //[...]
     
    $client->__setSoapHeaders($soapHeaders);

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

Discussions similaires

  1. [Web Service][SOAP] Erreur avec php5 et soap
    Par lehic dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/08/2011, 17h23
  2. [Web Service][SOAP] Comment activer l'extension soap (php5) ?
    Par lauryk dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 13/09/2007, 11h57
  3. [Web Service][SOAP] PHP5 & HTTPS
    Par kaboume dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 31/08/2007, 11h49
  4. [Web Service][SOAP] PHP5 SOAP et header
    Par ckeromen dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/12/2006, 20h27
  5. [Web Service][SOAP] WSDL/PHP5/SOAP: Renvoyer un tableau
    Par Netman dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/05/2006, 19h08

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