CMS Automne

Forum de la communauté du CMS Automne
Nous sommes actuellement le Mer Nov 27, 2024 2:21 pm

Le fuseau horaire est UTC [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
 Sujet du message: [Résolu]SSO Possible ?
MessagePublié: Jeu Jan 03, 2013 10:35 am 
Hors-ligne

Inscrit(e) le : Jeu Oct 27, 2011 1:31 pm
Message(s) : 31
Bonjour à tous!Et Bonne Année en passant ;)

Je me demandais si quelqu'un avait réussi à réaliser une connexion SSO avec le module LDAP d'Automne? J'ai lu à plusieurs reprises que cette fonctionnalité était prévue, mais je n'ai trouvé aucun exemple de réalisation. Comme aujourd'hui je me penche sur la question, je suis à la recherche de pistes.

Merci d'avance.


Dernière édition par Fouineux le Mar Fév 05, 2013 5:12 pm, édité 1 fois.

Haut
 Profil  
 
 Sujet du message: Re: SSO Possible ?
MessagePublié: Jeu Jan 03, 2013 9:14 pm 
Hors-ligne
Avatar de l’utilisateur

Inscrit(e) le : Sam Fév 12, 2011 5:26 pm
Message(s) : 188
Pas de mon côté, désolé :?


Haut
 Profil  
 
 Sujet du message: Re: SSO Possible ?
MessagePublié: Mar Fév 05, 2013 5:11 pm 
Hors-ligne

Inscrit(e) le : Jeu Oct 27, 2011 1:31 pm
Message(s) : 31
Après quelques galères, j'ai trouvé une solution. Alors techniquement cela fait un peu bidouille, mais ca a le mérite de fonctionner (et on utilise bien l'authentification SSO inclue dans Automne 4.2).

Il s'agit en fait de trouver le login Windows de l'utilisateur courant via NTLM, puis de lancer une authentification Automne SSO. Voici mon code, à adapter en conséquence :

Code :
<?php

//####################################################################################
//############## CONNEXION A AUTOMNE PAR SSO
//############## Ce fichier récupère le user windows de l'utilisateur, l'identifie sous
//############## automne et le redirige vers la page d'accueil de l'intranet.
//####################################################################################

//Inclusion API automne
include_once($_SERVER["DOCUMENT_ROOT"]."/automnedev/cms_rc_frontend.php");

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);
      }
         
function getInfosFromNTLM() {

   $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") {
         $user = get_msg_str($msg, 36);
         $domain = get_msg_str($msg, 28);
         $workstation = get_msg_str($msg, 44);
         return array('domain'=>$domain,'user'=>$user,'workstation'=>$workstation);
      }
   }
}

//Récupération des infos NTLM grâce aux fonctions ci-dessus
$infos_NTLM = getInfosFromNTLM();   

//Init de la constante du login à utiliser pour le SSO (donc celui que l'on vient de récupérer)
//Ici je concatène avec le domaine, mais je pense que cela dépend de son LDAP/Config
define('MOD_STANDARD_SSO_LOGIN', $infos_NTLM["user"]."@".strtolower($infos_NTLM["domain"]).".local");

//Constitution des params pour l'authentification
//login et password doivent être vide pour une authentification en SSO
$param = array("login" => "","password" => "","authType"=>"sso");
//Authentification
$cms_auth = new CMS_auth($param);
$auth = $cms_auth->authenticate();

//On peut tester si l'authentification s'est bien passée en traitant le retour à l'aide de $auth->getCode()
//Différentes valeurs possibles pour ce code :
 // FAILURE = 0
 // FAILURE_CREDENTIAL_INVALID = -3
 // FAILURE_IDENTITY_AMBIGUOUS = -2
 // FAILURE_IDENTITY_NOT_FOUND = -1
 // FAILURE_UNCATEGORIZED = -4
 // SUCCESS = 1

if($auth->getCode()==1)
{
   //Si tout s'est bien passé on actualise les sessions
   $init_sessions = CMS_session::authenticate(array("login" => $infos_NTLM["user"]."@".strtolower($infos_NTLM["domain"]).".local","authType"=>"sso"));
   //Ci après on peut rediriger vers automne ou faire le traitement que l'on souhaite...
   // To Do.....
}

?>


L'objectif est donc de lancer d'abord la page contenant ce code pour ensuite rediriger vers automne, ou intégrer cela à la racine d'automne directement.

Bien entendu je fournis ce code tel quel. Il marche très bien dans mon environnement (réseau intranet d'entreprise, IE8, Apache), mais je suis conscient qu'il n'est peut-être pas optimisé. Petite précision supplémentaire : il faut que les comptes existent déjà dans automne. Donc dans mon cas lors du tout premier accès de l'utilisateur, ce dernier se connecte (en utilisant le module LDAP qui va créer le compte) puis lors de toutes ses prochaines visites il sera automatiquement connecté.

Précision bis : j'ai toutefois dû modifier les paramètres d'IE sur certains postes : Option internet>>Sécurité>>Personnaliser le niveau>>Cocher Connexion automatique uniquement dans la zone Intranet (en tout cas, ne pas cocher Toujours demander le login et le mdp, sinon cela ne fonctionnera pas).

En espérant que ca en aide quelques uns!

En cas de questions, n'hésitez pas.


Haut
 Profil  
 
 Sujet du message: Re: [Résolu]SSO Possible ?
MessagePublié: Mer Fév 06, 2013 7:42 am 
Hors-ligne
Avatar de l’utilisateur

Inscrit(e) le : Sam Fév 12, 2011 5:26 pm
Message(s) : 188
Merci beaucoup pour le partage, je vais pas être capable de tester, pas le niveau :oops: , mais c'est cool d'avoir l'info.


Haut
 Profil  
 
 Sujet du message: Re: [Résolu]SSO Possible ?
MessagePublié: Mer Fév 06, 2013 11:09 am 
Hors-ligne
Avatar de l’utilisateur

Inscrit(e) le : Jeu Oct 07, 2010 1:28 pm
Message(s) : 13
Localisation : Toulouse
Salut Fouineux,

Excellent ! Ca fonctionne sur l'intranet que je suis en train de développer :)
Je l'ai testé avec succès sur IE, FF et Chrome.

J'ai juste modifié le chemin d'inclusion de cms_rc_frontend.php et la ligne de définition de MOD_STANDARD_SSO_LOGIN (pas de domaine dans le login sur notre LDAP).
J'ai inclus le script au début de la page de login et en cas de succès ça authentifie automatiquement l'utilisateur sans afficher le formulaire.

Merci pour le partage !


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 5 messages ] 

Le fuseau horaire est UTC [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 103 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Recherche de:
Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit par Maël Soucaze et Elglobo © phpBB.fr