PHP: problème d'authentification NTLM

Fermé
ElSegador Messages postés 4 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 28 novembre 2008 - 28 oct. 2008 à 13:03
ElSegador Messages postés 4 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 28 novembre 2008 - 28 oct. 2008 à 17:34
Bonjour,

Voilà, j'ai développé un petit webservice qui me permet d'écrire dans une base des données de benchmark, et de lire ladite base afin de faire des graphes.
J'ai déjà fait des clients en C# (qui sont des services windows) qui accèdent à ce webservice. Leur but est d'écrire dans la base de données et cela marche sans problème.
Par contre, j'essaie de faire un client en PHP afin de lire ma bdd, et là, je galère.

En fait, dans mon client, je commence par appeler une page php qui s'appelle CreateHeader.php, et qui sert à faire l'authentification NTLM. Le code est celui que l'on peut trouver sur le net (par ex ici https://codes-sources.commentcamarche.net/

Cela semble bien marcher, car je récupère bien le bon domaine et le nom de l'utilisateur.

Là où ça se complique c'est ensuite, quand j'essaie de créer le client.
La création proprement dite se passe bien, mais dès que j'essaie de lancer une fonction, j'ai une erreur du type:

Message = SoapFault exception: [HTTP] Unauthorized in C:\Program Files\EasyPHP 2.0b1\www\clientP4.php:22 Stack trace: #0 [internal function]: SoapClient->__doRequest('__soapCall('login', Array) #2 {main}

Ci-dessous, le code de mon client:
<?php
require_once("CreateHeader.php"); //le code est comme celui du lien ci-dessus
?>

<?php

if($IsLogIn){
try {
echo "IsLogIn:".$IsLogIn."<br/>";

$client = new SoapClient('http://127.0.0.1/fichier.wsdl',
array(
'uri' => "http://127.0.0.1/Server.php",
'trace' => 1,
'soap_version' => SOAP_1_1,
'domain' => "UBISOFT-ORG"
)
);

$obj = $client -> __soapCall('getP4Benchmark',array());

var_dump($obj);

echo "End ------";
}

catch(SoapFault $e){
printf("Message = %s\n",$e->__toString());
}
}
?>

Dans le fichier Server.php, j'ai une définition de toutes les fonctions que je peux utiliser, et il y a aussi un passage qui permet de s'identifier.
Je ne peux pas tout mettre sur ce forum, mais de personne à personne, je pourrais vous envoyer mon code de façon plus complète.

Si vous avez des pistes, je suis preneur.

Merci d'avance
A voir également:

1 réponse

ElSegador Messages postés 4 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 28 novembre 2008
28 oct. 2008 à 17:34
En fait, j'ai fait quelques changements pour simplifier ma structure et pas refaire x fois la même chose. En gros j'ai démélé les noeuds mais ça ne fonctionne toujours pas.
Pour faire simple donc, j'ai 3 fichiers principaux:
- client.php
- serveur.php
- createheader.php
Et un fichier fichier.wsdl aussi.

Donc dans mon server.php, j'arrive bien à instancier mon serveur soap, sans soucis. Et mes clients C# tourne toujours comme il faut avec le nouvel arrangement.

Le code du server.php est trop long pour que je le mette ici en entier, voici une petite partie:

$server = new SoapServer('fichier.wsdl',
array(
'uri' => 'http://qawebservice.ubisoft.org/Server.php',
'trace' => 1,
'soap_version' => SOAP_1_1
)
);
// On définit la classe qui va gérer les requètes SOAP

$server->setclass('myWebService');
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
// La méthode POST a été utilisée pour appeller cette page.
// On suppose donc qu'une requète a été envoyée, on la gère
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$HTTP_RAW_POST_DATA = file_get_contents('php://input');
session_name('PSESSION');
error_log($HTTP_RAW_POST_DATA);
//$server->UserAccount=$login;

$server -> handle();
/*
$server->IsAuthenticated=TRUE;
$server->UserAccount=$login;
*/
}
// sinon, on affiche une liste des méthodes que peut gérer ce serveur
else {
echo '<strong>--This SOAP server can handle following functions : </strong>';
echo '<ul>';
foreach($server -> getFunctions() as $func) {
echo '<li>' , $func , '</li>';
echo '<ul>';
echo '<li>';
switch($func)
{
case 'getUsers':
echo "Returns an array of all LyN users";
break;

}
echo '</li>';
echo '</ul>';
}
echo '</ul>';
}
Avant ça, j'ai la définition de la classe myWebService qui contient l'ensemble des fonctions que je peux utiliser.

De même celui de createheader.php.

Pour le client, je ne comprends pas pourquoi ça ne marche pas car je fais la création normalement:
<?php
require_once("CreateHeader.php");
?>

<?php
if($IsLogIn){
try {
echo "IsLogIn:".$IsLogIn."<br/>";

$client = new SoapClient('fichier.wsdl',
array(
'uri' => 'http://qawebservice.ubisoft.org/Server.php',
'trace' => 1,
'soap_version' => SOAP_1_1,
'domain' => "BLIZZARD-ORG"
)
);
// On définit la classe qui va gérer les requètes SOAP

//$client->setclass('myWebService');
//$client->setPersistence(SOAP_PERSISTENCE_SESSION);

foreach($client->__getFunctions() as $func) {
echo '<li>' , $func , '</li>';
}
$client->__soapCall("getP4Benchmark", array());
echo "End ------";
}
catch(SoapFault $e){
printf("Message = %s\n",$e->__toString());
}
}
?>

Pour les params, j'ai essayé avec login/pssword mais c'est pas ça. Le domain, je ne pense pas que ce soit utile.

Et donc l'erreur que j'ai:
Message = SoapFault exception: [HTTP] Unauthorized in C:\Program Files\EasyPHP 2.0b1\www\clientP4.php:26 Stack trace: #0 [internal function]: SoapClient->__doRequest('__soapCall('getP4Benchmark', Array) #2 {main}

Pas d'idée?
0