PHP CURL Headers de réponse non transmis
Posté : 24 févr. 2014, 18:29
Salut,
J'ai une appli web (un site en joomla 3.2) qui est protégée par un SSO (LemonLdap::NG). Lorsque qu'une requête est envoyée sur une ressource protégée, elle est redirigé vers le portail, l'utilisateur s'authentifie et la réponses est renvoyée sur l'appli web avec des headers de réponses personnalisés dans le $_SERVER tels le mail, le status etc ... (ensuite je me sers de ces headers pour donner l'accès au ressources protégées dans joomla).
J'ai dans l'idée de simplifier un peu tout cela en ecrivant un plugin d'authentification Joomla, cependant je butte déja avec CURL.
Pour l'instant j'arrive à envoyer une requête d'authentification via un formulaire externe comme ceci :
et le portail fait son travail en renvoyant bien les headers personnalisés configurés dans LemonLdap dans la réponse.
Cependant j'ai besoin de la même chose avec CURL. J'ai essayé ceci
1) lorsque je piste les requêtes et réponses via HTTPFox il n'y a plus la requête POST (pas important du moment que mon utilisateur est bien authentifié au niveau du portail mais y a quand même un truc que je comprends pas ...)
2) Mes headers de réponses personnalisés ne sont plus dans le $_SERVER.
S'agit-il d'un problème de fond (vu ma connaissance limitée des mecanismes HTTP) ou d'un problème de code ?
Merci d'avance.
J'ai une appli web (un site en joomla 3.2) qui est protégée par un SSO (LemonLdap::NG). Lorsque qu'une requête est envoyée sur une ressource protégée, elle est redirigé vers le portail, l'utilisateur s'authentifie et la réponses est renvoyée sur l'appli web avec des headers de réponses personnalisés dans le $_SERVER tels le mail, le status etc ... (ensuite je me sers de ces headers pour donner l'accès au ressources protégées dans joomla).
J'ai dans l'idée de simplifier un peu tout cela en ecrivant un plugin d'authentification Joomla, cependant je butte déja avec CURL.
Pour l'instant j'arrive à envoyer une requête d'authentification via un formulaire externe comme ceci :
Code : Tout sélectionner
<html>
<body onload="document.createElement('form').submit.call(document.getElementById('myForm'))">
<form id="myForm" name="myForm" action="LEMONLDAP_PORTAL_URL" method="POST">
<input type=hidden name="user" value="MY_USERNAME"/>
<input type=hidden name="password" value="MY_PASSWORD"/>
<input type=hidden name="url" value="PROTECTED_APP_URL64"/>
</form>
</body>
</html>
Cependant j'ai besoin de la même chose avec CURL. J'ai essayé ceci
<?php
$credentials= array('username' => 'MY_USERNAME', 'password' => 'MY_PASSWORD');
$url='LEMONLDAP_PORTAL_URL';
$vHost='PROTECTED_APP_URL';
$vHost64=base64_encode($vHost);
$postData= array('user' => $credentials['username'],
'password' => $credentials['password'],
'url' => $vHost64,
'timezone' => 1);
//create cURL connection
$ch = curl_init();
//set options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
//set data to be posted
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
//perform our request
$result = curl_exec($ch);
//show information regarding the request
//print_r(curl_getinfo($ch));
//echo curl_errno($ch) . '-' . curl_error($ch);
//close the connection
curl_close($ch);
echo $result;
?>
L'utilisateur est correctement authentifié dans le manager de session de LemonLdap::NG mais ...1) lorsque je piste les requêtes et réponses via HTTPFox il n'y a plus la requête POST (pas important du moment que mon utilisateur est bien authentifié au niveau du portail mais y a quand même un truc que je comprends pas ...)
2) Mes headers de réponses personnalisés ne sont plus dans le $_SERVER.
S'agit-il d'un problème de fond (vu ma connaissance limitée des mecanismes HTTP) ou d'un problème de code ?
Merci d'avance.