Authentification

From Dolibarr ERP CRM Wiki
Revision as of 17:21, 25 August 2009 by Eldy (talk | contribs) (→‎Processus)
Jump to navigation Jump to search




Introduction

Le système d'authentification de Dolibarr devient relativement complexe, et un bug peut être particulièrement difficile à trouver si l'on ne connaît par le processus d'authentification. Cette page présente une découpe du processus, qui permet de suivre la procédure et d'intervenir là où il le faut.

Processus

Le processus démarre par l'appel de la page que l'on souhaite voir. Par exemple, la page d'accueil htdocs/index.php. Mais ce n'est pas ce fichier assure la demande d'authentification. En fait toute page de Dolibarr inclut un fichier pre.inc.php qui lui même inclut le fichier main.php qui inclut master.php. Nous avons donc:

 <index.php>
   <pre.inc.php>
     <main.inc.php>
       <master.inc.php>
         #1#
       </master.inc.php>
       #2#
       if (! isset($_SESSION["dol_login"]))
       {
         if (isset($_POST["username"]))
         {
           ...
           // 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>
   </pre.inc.php>
 </index.php>

Le #1# représente le chargement de tout un tas de librairie que nous utiliserons par la suite, ainsi que l'initialisation du contexte d'exécution du code PHP (langue, configuration, utilisateur vierge).

Le #2# represente le code d'authentification: Le programm vérifie si on est dans une session logguée (cela signifie que $_SESSION["dol_login"] existe). Si non, on vérifie si on a reçu des données issu du formulaire de login/mote passe. Au premier appel, ce n'est pas le cas puisque nous n'avons pas encore eu le formulaire à l'écran. Donc on continue et $login est faut, aussi on affiche alors le formulaire HTML et le script se termine.

Après la soumission du login, la même page (donc index.php) est appelée, nous allons toujours dans le #1#, puis #2# et cette fois $_POST["username"] est défini. Aussi nous vérifions si le user et mot de passe sont ok (la vérifivation est faite dans la base, en LDAP ou autre, cela dépend de la variable $dolibarr_main_authentication du fichier de configuration). Si le couple login/pass est ok, la variable $login est définie, aussi nous n'affichons pas à nouveau le formulaire mais nous conitnuons et positionnons $_SESSION["dol_login"], ainsi au prochain appel d'une page, nous ne rentrons plus dans le "if (! isset($_SESSION["dol_login"]))".

Les modules de login

Les modules de login sont les fichiers qui contiennent les fonctions qui controlent la validite d'un couple user/password. 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. 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.