Autentificación: Difference between revisions

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
Tag: 2017 source edit
 
(25 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<!-- BEGIN interlang links -->
<!-- Do NOT edit this section
    Links below are automatically managed by PolyglotBot
    You can edit links on the English source page : Authentication -->
[[en:Authentication]]
[[fr:Authentification]]
[[zh:认证]]
<!-- END interlang links -->
[[Category:Básico]]
{{TemplateDocDesarrollo}}
{{TemplateDocDesarrollo}}
{{ToTranslate}}


== Introducción ==
 
 
 
 
 
 
 
= Introducción =
El sistema de autenticación de Dolibarr es relativamente complejo, y un error puede ser especialmente difícil de encontrar a menos conozcamos el proceso de autenticación.
El sistema de autenticación de Dolibarr es relativamente complejo, y un error puede ser especialmente difícil de encontrar a menos conozcamos el proceso de autenticación.
Esta página presenta una descripción del proceso, que permite el seguimiento del procedimiento, permitiendo la intervención cuando sea necesario.
Esta página presenta una descripción del proceso, que permite el seguimiento del procedimiento, permitiendo la intervención cuando sea necesario.


== Proceso ==
= Proceso =


El proceso se inicia llamando a la página que deseamos ver. Por ejemplo, la página principal htdocs/index.php. Pero este no es el archivo de la solicitud de autenticación asegura. De hecho, cualquier página Dolibarr incluye un fichero pre.inc.php que el mismo incluye el fichero main.php que a su vez incluye master.php.
El proceso se inicia llamando a la página que deseamos ver. Por ejemplo, la página principal htdocs/index.php. Pero este no es el archivo de la solicitud de autenticación asegura. De hecho, cualquier página Dolibarr incluye un fichero main.inc.php que el mismo incluye el fichero master.inc.php.
Tenemos pues:
Tenemos pues:
<pre>
 
<index.php>
{{Template:CodeSampleForLoginProcess}}
  <pre.inc.php>
    <main.inc.php>
      <master.inc.php>
        #1#
      </master.inc.php>
      #2#
    </main.inc.php>
  </pre.inc.php>
</index.php>
</pre>


El #1# representa la carga de una pila de librerias que vamos a usar, y la inicialización del contexto de la ejecución de código PHP (idioma, configuración, usuario, etc.).
El #1# representa la carga de una pila de librerias que vamos a usar, y la inicialización del contexto de la ejecución de código PHP (idioma, configuración, usuario, etc.).


El #2# representa la ejecución del código específico para la autenticación: La verificación de que estamos en una sesión iniciada y de lo contrario mostar la pantalla de login. Aquí es donde se inicializa el bojeto usuario:
El #2# representa la ejecución del código específico para la autenticación: La verificación de que estamos en una sesión iniciada y de lo contrario mostar la pantalla de login.  


La ejecución del login, se presenta como sigue:
El #3# sirve para comprobar los permisos y mostrar la página. Vea la página [[Permisos]] para más información.


$authmode=array('http','dolibarr');
= Los módulos de login =
if (isset($dolibarr_auto_user)) $authmode=array('auto');
// Si la demande du login a déjà eu lieu, on le récupère depuis la session
// sinon appel du module qui réalise sa demande.
// A l'issu de cette phase, la variable $login sera définie.
$login='';
if (! session_id() || ! isset($_SESSION["dol_user"]))
{
  # Procédure de login. Affiche page login #
}
else
{
    // On est déjà en session
    $login=$_SESSION["dol_user"];
}
// Charge l'objet user depuis son login
$result=$user->fetch($login);
if ($result <= 0)
{
    dolibarr_print_error($db,$langs->trans("ErrorCantLoadUserFromDolibarrDatabase"));
    exit;
}
// Est-ce une nouvelle session
if (! isset($_SESSION["dol_user"]))
{
    // Nouvelle session pour ce login
    dolibarr_syslog("New session in DOLSESSID_".$dolibarr_main_db_name.": ".session_id());
    $user->update_last_login_date();
    $_SESSION["dol_user"]=$user;
}


Pero analizándolo con más detalle el código de llamada del método de verificación del conjunto usuario/contraseña (hay varios métodos disponibles, por lo que varias llamadas son posibles, debiendo ser mutuamente excluyentes).
Los módulos de login son archivos que contienen las funciones que controlan la validación de un conjunto usuario/contraseña.


    session_name("DOLSESSID_".$dolibarr_main_db_name);
Hay un archivo por módulo. Cada uno proporciona un tipo diferente de control.
    session_start();
    // Si on rentre ici suite a soumission d'un couple user/password alors
    // Selon la valeur dolibarr_main_authentication, on appelle la fonction
    // dans le bon fichier qui verifie si un couple user/mot de passe est correcte
    // Sinon, on affiche la page de login


== Les modules de login ==
* El fichero '''htdocs/core/login/functions_http.php''' controla la validación del conjunto usuario/contraseña por una autentificación del tipo http Basic.
* El fichero '''htdocs/core/login/functions_ldap.php''' verifica la validez del conjunto usuario/contraseña en un anuario LDAP.
* El fichero '''htdocs/core/login/functions_dolibarr.php''' verifica la validez del conjunto usuario/contraseña en la base de datos Dolibarr.


Les modules de login sont les fichiers qui contiennent les fonctions qui controlent la validite d'un couple user/password.
Cada fichero contiene unicamente una función '''check_user_password_xxx''' pero Dolibarr utilizará uno. Este será el que cuyo valor '''xxx''' sea el valor de la variable '''dolibarr_main_authentication''' de '''conf/conf.php'''.
Il y a un fichier par module. Chaque fichier assure un type de controle différent.
* Le fichier '''htdocs/include/login/functions_http.php''' controle la validite du couple user/mot de passe par une authentification de type http Basic.
* Le fichier '''htdocs/include/login/functions_ldap.php''' verifie la validite d'un couple user/mot de passe dans un annuaire LDAP.
* Le fichier '''htdocs/include/login/functions_dolibarr.php''' veririe la validite d'un couple user/mot de passe dans la base de donnee Dolibarr.


Chaque fichier contient en fait uniquement une fonction '''check_user_password_xxx''' mais Dolibarr ne va en utiliser qu'un. Ce sera celui dont la valeur '''xxx''' correspond a la valeur de la variable '''dolibarr_main_authentication'''.
En este archivo, Dolibarr solicita la función que encuentre y le envía como parámetros el usuario y la contraseña. La función devolverá si el conjunto es válido.
Dans ce fichier, Dolibarr sollicite la seule fonction qui s'y trouve en envoyant comme parametres le user et mot de passe.La fonction renvoie vrai si le couple est valide.

Latest revision as of 08:39, 17 January 2023





Introducción

El sistema de autenticación de Dolibarr es relativamente complejo, y un error puede ser especialmente difícil de encontrar a menos conozcamos el proceso de autenticación. Esta página presenta una descripción del proceso, que permite el seguimiento del procedimiento, permitiendo la intervención cuando sea necesario.

Proceso

El proceso se inicia llamando a la página que deseamos ver. Por ejemplo, la página principal htdocs/index.php. Pero este no es el archivo de la solicitud de autenticación asegura. De hecho, cualquier página Dolibarr incluye un fichero main.inc.php que el mismo incluye el fichero master.inc.php. Tenemos pues:

 <mypage.php>
     <main.inc.php>
       <master.inc.php>
         #1#
       </master.inc.php>
       #2#
       if (!isset($_SESSION["dol_login"]))
       {
         // Set goontestloop to true if we are coming from a post of the login page ($_POST["username"] and $_POST["actionlogin"] is defined.
         // We may also set goontestloop to true for some other cases depending on the authentication mode (see next chapter)
         $goontestloop = ...  
         if ($goontestloop)
         {
           checkLoginPassEntity(username, password, ...);
           ...
           // if user and pass are ok, we set $login
           $login=
         }
         if (! $login)
         { 
	       // We show login page
	       include_once(DOL_DOCUMENT_ROOT."/lib/security.lib.php");
	       dol_loginfunction($langs,$conf,$mysoc);
	       exit;
         }
         ...
       }
     </main.inc.php>
   #3#
 </mypage.php>


El #1# representa la carga de una pila de librerias que vamos a usar, y la inicialización del contexto de la ejecución de código PHP (idioma, configuración, usuario, etc.).

El #2# representa la ejecución del código específico para la autenticación: La verificación de que estamos en una sesión iniciada y de lo contrario mostar la pantalla de login.

El #3# sirve para comprobar los permisos y mostrar la página. Vea la página Permisos para más información.

Los módulos de login

Los módulos de login son archivos que contienen las funciones que controlan la validación de un conjunto usuario/contraseña.

Hay un archivo por módulo. Cada uno proporciona un tipo diferente de control.

  • El fichero htdocs/core/login/functions_http.php controla la validación del conjunto usuario/contraseña por una autentificación del tipo http Basic.
  • El fichero htdocs/core/login/functions_ldap.php verifica la validez del conjunto usuario/contraseña en un anuario LDAP.
  • El fichero htdocs/core/login/functions_dolibarr.php verifica la validez del conjunto usuario/contraseña en la base de datos Dolibarr.

Cada fichero contiene unicamente una función check_user_password_xxx pero Dolibarr utilizará uno. Este será el que cuyo valor xxx sea el valor de la variable dolibarr_main_authentication de conf/conf.php.

En este archivo, Dolibarr solicita la función que encuentre y le envía como parámetros el usuario y la contraseña. La función devolverá si el conjunto es válido.