Trace: » Authentification Automatique v0.68 - SUSE

Authentification Automatique v0.68 - SUSE

Article rédigé par Cuty

Introduction

Le but de ce tip est de permettre aux utilisateurs de GLPI de pouvoir s'identifier dans l'application sans avoir à retaper leur nom d'utilisateur ainsi que leur mot de passe SI et SEULEMENT SI le serveur GLPI est un serveur Linux.

Cet astuce fonctionne avec Apache 2 et GLPI configuré avec une authentification externe avec Active Directory. L'utilisateur doit utiliser Internet Explorer.

La configuration sur laquelle a été validé cette manipulation est celle-ci :

- GLPI : 0.68.3-2 et AD sur W2k3 - Internet Explorer 6sp2 / - Serveur Suse_Linux/9.3 Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.7e PHP/4.4.6 mod_perl/2.0.2 Perl/v5.8.6

Par conséquent si vous testez sur une autre configuration et que cela fonctionne n'hésitez pas à compléter.

Petite précision, les modifications ainsi que le code fourni dans cet article ne sont pas de moi à part quelques lignes donc un grand merci à ceux qui se reconnaitront.

Mise en place

Modification dans Glpi

Il faut commencer par copier les fichiers index.php et login.php pour sauvegarder les fichiers d'origine de Glpi, pour pouvoir revenir en arrière en cas de problème. Personellement je leur rajoute l'extension .orig pour plus de clarté. Ensuite il faut insérer ou modifier du code dans index.php et login.php.

*> : Symbolise du code à ajouter.

* : Symbolise une modification du code. Dans notre cas remplacez la 1ere étoile par la 2eme.

index.php

:fr:pbauthautolinux.png

 48 :    // Using CAS server
 49 :    if (!empty($cfg_glpi["cas_host"])&&!isset($_GET["noCAS"])) {
 50 :        glpi_header("login.php");
 51 :    }
 *>    $ip = $_SERVER['REMOTE_ADDR'];
 *>    $commande = "nmblookup -A ".$ip;
 *>    exec ($commande ,$tableau);
 *>    foreach ($tableau as $colone)
 *>        {
 *>        if (strpos($colone,"<03>"))
 *>                {
 *>                $login = strtok($colone," t");
 *>                }
 *>      }
 *>    $ident = strtolower($login);
 *>    if ( $ident != '' ){
 *>        header("Location: login.php?login_name=".$ident);
 *>    }       
 52 :    // Send UTF8 Headers
 53 :    header("Content-Type: text/html; charset=UTF-8");
 54 :    // Start the page
login.php

:fr:pbauthautolinux.png

 54 :    if (isset($_POST['login_password'])){ 
 55 :    $_POST['login_password']=unclean_cross_side_scripting_deep($_POST['login_password']); 
 *>    $http_auth = false;
 *>    } 
 *>    else if (!isset($_POST['login_password'])){ 
 *>    $_POST['login_password']=unclean_cross_side_scripting_deep($_POST['login_password']); 
 *>        $http_auth = false;
 *>        $ip = $_SERVER['REMOTE_ADDR'];
 *>        $commande = "nmblookup -A ".$ip;
 *>        exec ($commande ,$tableau);
 *>        foreach ($tableau as $colone)
 *>                {
 *>                if (strpos($colone,"<03>"))
 *>                    {
 *>                    $login = strtok($colone," t");
 *>                    }
 *>               }
 *>        $ident = strtolower($login);
 *>           
 *>         if ( $ident != '' ){
 *>              $_POST['login_name'] = $ident;
 *>              $http_auth = true;
 *>         }
 *>    } 
 56 :    if (!isset($_POST["noCAS"])&&!empty($cfg_glpi["cas_host"])) {
 72 :    if (!$auth_succeded) // Pas de tests en configuration CAS
 73 :    if (empty($_POST['login_name'])||empty($_POST['login_password'])){
 73 *:     if ((empty($_POST['login_name'])||empty($_POST['login_password'])) &&!$http_auth) {    
 74 :        $identificat->err=$lang["login"][8];
 75 :        } else {
 94 :        //if ($auth_succeded) $user_present = $identificat->user->getFromDBbyName(utf8_decode($_POST['login_name']));
 95 :    
 96 :        }
 *>        // try HTTP authentication
 *>        if ($http_auth){
 *>          
 *>          $found_dn=false;
 *>          $auth_succeded=0;
 *>          $found_dn=$identificat->ldap_get_dn_active_directory($cfg_glpi["ldap_host"],$cfg_glpi["ldap_basedn"],$_POST['login_name'],$cfg_glpi["ldap_rootdn"],$cfg_glpi["ldap_pass"],$cfg_glpi["ldap_port"]);
 *>          if ($found_dn!=false){
 *>            $auth_succeded = true;
 *>            $identificat->extauth=1;
 *>            $user_present = $identificat->user->getFromDBbyName($_POST['login_name']);
 *>            $identificat->user->getFromLDAP_active_directory($cfg_glpi["ldap_host"],$cfg_glpi["ldap_port"],$found_dn,$cfg_glpi["ldap_rootdn"],$cfg_glpi["ldap_pass"],$cfg_glpi['ldap_fields'],$_POST['login_name'],$cfg_glpi["ldap_condition"]);        }
 *>    
 *>    
 *>        }
 97 :
 98 :        // Second try IMAP/POP
 99 :        if (!$auth_succeded&&!empty($cfg_glpi["imap_auth_server"])) {

Egalement disponible sur le forum: http://www.glpi-project.org/forum/viewtopic.php?id=1397&p=5

Du côté des navigateurs

Internet Explorer

Il faut bien vérifier que “Activer l'authentification intégrée de Windows” dans les options avancées d' Internet Explorer soit bien coché.

Il faut penser à rajouter l'url de GLPI dans la liste des sites de l'Intranet local sous l'onglet Sécurité dans les options d'Internet Explorer.

Mozilla Firefox

Je n'ai pas Firefox dans l'entreprise où je me trouve , si des gens peuvent remonter des infos , ca serait sympa ! :)

A vous de jouer

Voilà à peu près tout ce que j'ai pu rassembler sur cette ajout de fonction mais si certain d'entre vous veulent améliorer le tip alors n'hésitez pas, je suis aussi preneur!!!! ^_^

Adresse du post sur le forum à l'origine de l'article: http://www.glpi-project.org/forum/viewtopic.php?id=1397&p=1