[PHP] SSO avec LDAP

SSO avec LDAP [PHP] - PHP - Programmation

Marsh Posté le 19-11-2012 à 14:57:50    

Bonjour à tous,
 
Je cherche à faire une authentification relativement 'simple' sur un Intranet avec un AD et pour que tout soit parfait je souhaite le faire en SSO
 
Sur mon serveur Intranet, la connexion avec LDAP fonctionne et mes utilisateurs sont reconnus lorsqu'ils rentrent leurs login/mdp dans un formulaire, donc pas de soucis de ce coté là. De plus le serveur héberge un GLPI qui fonctionne déjà en SSO donc toute la config devrait se prêter au SSO (par ex l'adresse du serveur est déjà dans les sites de confiance).
 
Maintenant je n'ai rien trouvé dans mes recherches qui me permette de faire mon SSO sans rien toucher à la config... donc est ce que quelqu'un aurait une méthode ou un tuto à me conseiller ? Eventuellement comment est ce que GLPI gère son SSO ?
 
Merci pour vos infos
++

Reply

Marsh Posté le 19-11-2012 à 14:57:50   

Reply

Marsh Posté le 19-11-2012 à 22:58:09    

J'ai rien compris, un coup tu dis que ça fonctionne, l'autre coup tu dis que tu veux de l'aide.
 
Je te poste quand même 2 liens, on sait jamais :
 
http://php.net/manual/fr/book.ldap.php
 
http://php.net/manual/fr/function.ini-set.php


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 20-11-2012 à 15:31:52    

Ce qui fonctionne c'est l'authentifation LDAP au travers d'un formulaire.
 
Le point sur lequel je souhaite de l'aide c'est la mise en place du SSO pour que les utilisateurs n'aient pas à rentrer de mot de passe ou remplir de formulaire, en gros que leur authentification de session windows soit l'unique moment où ils rentrent un mot de passe.

Reply

Marsh Posté le 20-11-2012 à 16:45:19    

Bon je viens en fait de trouver solution à mon problème.
 
J'avais trouvé cette page, mais j'avais buté sur le fait qu'il y avait une première authentification, ce qui ne me convenait donc pas. Ce 'soucis' venait juste du fait que mon site n'était pas dans mes sites de confiance, une GPO a vite résolu le problème.
 
Voici la page en question :
 
http://siphon9.net/loune/2007/10/s [...] lm-in-php/
 
Le code :


<?php
$headers = apache_request_headers();
 
if (!isset($headers['Authorization']))
{
 header('HTTP/1.1 401 Unauthorized');
 header('WWW-Authenticate: NTLM');
 exit;
}
 
$auth = $headers['Authorization'];
 
if (substr($auth,0,5) == 'NTLM ')
{
 $msg = base64_decode(substr($auth, 5));
 if (substr($msg, 0, 8) != "NTLMSSP\x00" )
  die('error header not recognised');
 if ($msg[8] == "\x01" ) {
  $msg2 = "NTLMSSP\x00\x02\x00\x00\x00".
  "\x00\x00\x00\x00". // target name len/alloc            
  "\x00\x00\x00\x00". // target name offset              
  "\x01\x02\x81\x00". // flags              
  "\x00\x00\x00\x00\x00\x00\x00\x00". // challenge              
  "\x00\x00\x00\x00\x00\x00\x00\x00". // context              
  "\x00\x00\x00\x00\x00\x00\x00\x00"; // target info len/alloc/offset            
  header('HTTP/1.1 401 Unauthorized');          
  header('WWW-Authenticate: NTLM '.trim(base64_encode($msg2)));
  exit;
 }
 else if ($msg[8] == "\x03" )
 {
  function get_msg_str($msg, $start, $unicode = true)
  {
   $len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
   $off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
   if ($unicode)
    return str_replace("\0", '', substr($msg, $off, $len));
   else
    return substr($msg, $off, $len);
  }
  $user = get_msg_str($msg, 36);
  $domain = get_msg_str($msg, 28);
  $workstation = get_msg_str($msg, 44);
  print "You are $user from $domain/$workstation";
 }
}
?>


 
J'ai donc le nom de session qui est renvoyé ce qui me convient pour ensuite au travers de LDAP faire une vérification.
 
si ça peut servir à d'autres personnes !
 
++
 

Reply

Marsh Posté le 21-11-2012 à 01:33:45    

Thanks for sharing ;)


---------------
Directeur Technique (CTO)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed