Trace:

Differences

This shows you the differences between the selected revision and the current version of the page.

es:autenticacion_automatica 2015/07/03 09:46 current
Line 1: Line 1:
 +Artículo escrito por Garga (Traducido por teide3178)
 +
 +
 +
 +
 +
 +==== Introducción ====
 +El objetivo de este artículo es permitir a los usuarios de GLPI poderse indentificar en la aplicación sin tener que reintroducir su usuario y contraseña.
 +
 +Esta solución funciona con **Apache 2** y GLPI configurado para autenticaciones externas mediante **Directorio Activo**. El usuario debe utilizar Internet Explorer.
 +
 +La configuración sobre la cual se validó esta manipulación es ésta:
 +
 +- GLPI: 0.68.2 y AD sobre W2k3 - Internet Explorer 6sp2/- XAMPP version 1.5.1/Apache 2.2.0/MySql: 5.0.18/ PHP 5.1.1
 +
 +Por lo tanto si prueban sobre otra configuración y esta funciona no duden en completarlo. Parece que este patch funcionó también con Apache e IIS pero aún no he podido probarlo, sean libres ustedes de hacerlo y completar este artículo.
 +
 +Finalmente una última precisión, las modificaciones así como el código proporcionado en este artículo no son mios, a parte de la adaptación de éste para la versión 0.68.2 de GLPI, muchas gracias a OUKIBILL, tsmr, blink38, VANB etc...:-P
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +==== Instalación ====
 +=== Modificación en el servidor Web ===
 +== Apache 2 ==
 +Lo primero de todo debemos activar el módulo **mod_auth_sspi.so** que está incluidos en la distribución. Basta con descomentar la línea: **LoadModule sspi_auth_mo módulos/mod_auth_sspi.so** en el fichero de configuración de Apache (**apacheconfhttpd.conf**)
 +
 +Es necesario añadir también (al final del mismo fichero por ejemplo):
 +<code apache>
 +#glpi configuration
 + <Directory "C:/OCSinventoryNG/xampp/htdocs/glpi>
 +  Options None
 +  Order allow,deny
 +  Allow from all
 +
 +  AuthName "Acceso Restringido"
 +  AuthType SSPI
 +  SSPIAuth On
 +  SSPIAuthoritative On
 +  SSPIOfferBasic On
 +  require valid-user
 +  </Directory>"
 +</code>
 +adaptando el path de su directorio GLPI según su configuración.
 +== Apache ==
 +Si utilizan Apache, utiliza el mod_auth_ntlm. Basta con descomentar la línea que contiene mod_auth_ntlm en el fichero de configuración de Apache **apacheconfhttpd.conf**.
 +
 +Puede ser también que sea necesario añadir el código al final del fichero de conf de Apache como para Apache 2 pero como no he tenido forma de probarlo, no puedo confirmarlo. Una vez más a de probarse... ;-)
 +== IIS ==
 +Si utilizan IIS, esto irá completamente solo. Si alguien puede probarlo y confirmarlo aquí, esa sería la señal.
 +=== Modificación en GLPI ===
 +Es necesario comenzar por copiar los ficheros **index.php** y **login.php** para salvaguardar los ficheros de origen de Glpi, para poder volver de nuevo atrás en caso de problema. Personalmente les añado la extensión **.orig** para mayor claridad. A continuación es necesario insertar o modificar el código de **index.php** y **login.php**.
 +
 +El código tal como se copia en este artículo es el resultado de un software de comparación por lo tanto la explicación de los símbolos es el siguiente:
 +
 +**! >** : Simboliza el código que debe añadirse.
 +
 +***** : Simboliza una modificación del código. En nuestro caso sustituya a la 1ª estrella por la 2ª.
 +== index.php ==
 +{{:es:pbauthautogood.png|:es:pbauthautogood.png}}
 +<code>
 +  36   // Test si config_db n'existe pas on lance l'installation
 +  37  
 +  38   include ("_relpos.php");
 +  39   include ($phproot . "/config/based_config.php");
 +  40   if(!file_exists($cfg_glpi["config_dir"] . "/config_db.php")) {
 +  41     include($phproot ."/install/install.php");
 +  42     die();
 +  43   }
 +  44   else
 +  45   {
 +  46     include ($phproot . "/inc/includes.php");
 +  47  
 +  48     // Using CAS server
 +  49     if (!empty($cfg_glpi["cas_host"])&&!isset($_GET["noCAS"])) {
 +  50       glpi_header("login.php");
 +  51     }
 +  =======
 +  52 !>   if ( isset($_SERVER["REMOTE_USER"])){         
 +  52 !>       $pos = stripos($_SERVER["REMOTE_USER"],"");
 +  52 !>             if (! $pos === false ){
 +  52 !>         $login = substr($_SERVER["REMOTE_USER"], $pos + 1);
 +  52 !>         if ( $login != '' ){
 +  52 !>           header("Location: login.php?login_name=".$login);
 +  52 !>           }
 +  52 !>         }
 +  52 !>     }
 +  =======
 +  52  
 +  53  
 +  54     // Send UTF8 Headers
 +  55     header("Content-Type: text/html; charset=UTF-8");
 +  56     // Start the page
 +  57  
 +  58  
 +  59     echo "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">";
 +  60     echo "<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"  lang="fr">";
 +  61     echo "<head><title>GLPI Login</title>n";
 +  62     echo "<meta http-equiv="Content-Type" content="text/html; charset=utf-8 " />n";
 +  63     echo "<meta http-equiv="Content-Script-Type" content="text/javascript" />n";
 +  64     echo "<link rel='shortcut icon' type='images/x-icon' href='".$HTMLRel."pics/favicon.ico' />";
 +  65  
 +  66     // Appel CSS
 +</code>
 +== login.php ==
 +{{:es:pbauthautogood.png|:es:pbauthautogood.png}}
 +<code>
 + 45   $_POST=array_map('stripslashes',$_POST);
 + 46  
 + 47   //Do login and checks
 + 48   $user_present=1;
 + 49   if (!isset($_POST['login_name'])) $_POST['login_name']="";
 + 50   $identificat = new Identification();
 + 51  
 + 52   $auth_succeded=false;
 + 53  
 + 54   $_POST['login_password']=unclean_cross_side_scripting_deep($_POST['login_password']);
 + 55  
 + =======
 + 56 !> $http_auth = false;
 + 56 !> if ( isset($_SERVER["REMOTE_USER"])){
 + 56 !>   $pos = stripos($_SERVER["REMOTE_USER"],"");
 + 56 !>   if (! $pos === false ){
 + 56 !>     $login = substr($_SERVER["REMOTE_USER"], $pos + 1);
 + 56 !>     if ( $login != '' ){
 + 56 !>       $_POST['login_name'] = $login;
 + 56 !>       $http_auth = true;
 + 56 !>     }
 + 56 !>   }
 + 56 !> }
 + 56 !>
 + =======
 + 56   if (!isset($_POST["noCAS"])&&!empty($cfg_glpi["cas_host"])) {
 + 57     include ($phproot . "/lib/phpcas/CAS.php");
 + 58     phpCAS::client(CAS_VERSION_2_0,$cfg_glpi["cas_host"],intval($cfg_glpi["cas_port"]),$cfg_glpi["cas_uri"]);
 +</code>
 +
 +<code>
 + 66     if (!$user_present) $identificat->user->fields["name"]=$user;
 + 67   }
 + 68   if (isset($_POST["noCAS"])) $_SESSION["noCAS"]=1;
 + 69  
 + 70   if (!$auth_succeded) // Pas de tests en configuration CAS
 + =======
 + 71 *   if (empty($_POST['login_name'])||empty($_POST['login_password'])){
 +  *     if ((empty($_POST['login_name'])||empty($_POST['login_password'])) && !$http_auth){
 + =======
 + 72       $identificat->err=$lang["login"][8];
 + 73     } else {
 + 74  
 + 75       // exists=0 -> no exist
 + 76       // exists=1 -> exist with password
 + 77       // exists=2 -> exist without password
 +</code>
 +
 +<code>
 + 90         // With UTF8 decoding
 + 91         //if (!$auth_succeded) $auth_succeded = $identificat->connection_db(utf8_decode($_POST['login_name']),utf8_decode($_POST['login_password']));
 + 92         //if ($auth_succeded) $user_present = $identificat->user->getFromDBbyName(utf8_decode($_POST['login_name']));
 + 93  
 + =======
 + 94 !>     }
 + 94 !>     // try HTTP authentication
 + 94 !>     if ($http_auth){
 + 94 !>      
 + 94 !>       $found_dn=false;
 + 94 !>       $auth_succeded=0;
 + 94 !>       $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"]);
 + 94 !>      
 + 94 !>       if ($found_dn!=false){
 + 94 !>         $auth_succeded = true;
 + 94 !>         $identificat->extauth=1;
 + 94 !>         $user_present = $identificat->user->getFromDBbyName($_POST['login_name']);
 + 94 !>         $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"]);        }
 + =======
 + 94       }
 + 95  
 + 96       // Second try IMAP/POP
 +</code>
 +=== Del lado de los navegadores ===
 +== Internet Explorer ==
 +Es necesario comprobar bien que **“Habilitar autenticación integrada de Windows”** en las opciones avanzadas de Internet Explorer la casilla de verificación está activada.
 +
 +Es necesario pensar en añadir la url de GLPI en la lista de los sitios de la **Intranet Local** bajo la **pestaña Seguridad** en las opciones de Internet Explorer.
 +== Mozilla Firefox ==
 +Se va a decir que para Firefox esto no funciona.
 +
 +Se dá aviso a los aficionados para encontrar una solución.....;-)
 +
 +Tsmr: Si, si funciona. Lo enumeraré en cuanto tenga un poco de tiempo pero será necesario modificar un valor en about:config
 +
 +network.negociate-auth.delegation-uris: (nombre del servidor AD/LDAP)
 +
 +network.negociate-auth.trusted-uris: nombre de los sitios web con autenticación integrada.
 +
 +
 +posible mediante gpo este script:
 +
 +[[http://sourceforge.net/projects/firefoxadm/]]
 +
 +
 +
 +
 +==== A ustedes de jugar ====
 +¡¡¡¡Aquí está todo lo que pude reunir sobre esta función pero si alquien de entre ustedes quiere mejorar el tip entonces no vacilen, soy también tomador!!!!^_^
 +
 +Dirección del post en el foro al origen del artículo: [[http://www.glpi-project.org/forum/viewtopic.php?id=1397&p=1]]