Authentification

De Dolibarr Wiki.

Retour index
Documentation développeur

File Doc dev.png





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 pas 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. Une connaissance de la notion de session PHP est requise.

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 qui assure la demande d'authentification. En fait toute page de Dolibarr inclut un fichier main.inc.php qui lui même inclut le fichier master.inc.php. Nous avons donc:

 <mapage.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>
   #3#
 </mapage.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# représente le code d'authentification: Le programme vérifie si on est dans une session logué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. Aussi on rentre dans le if, et $login étant faux, on affiche alors le formulaire HTML de login 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 continuons et positionnons $_SESSION["dol_login"], ainsi au prochain appel d'une page, nous ne rentrons plus dans le "if (! isset($_SESSION["dol_login"]))".

Le #3# correspond à la vérification des permissions métiers et à l'affichage de la page si c'est ok. Voir la page See Permissions pour plus d'informations.

Les modules de login

Les modules de login sont les fichiers qui contiennent les fonctions qui contrôlent la validité d'un couple user/password. Il y a un fichier par module. Chaque fichier assure un type de contrôle différent.

  • Le fichier htdocs/core/login/functions_http.php contrôle la validité du couple user/mot de passe par une authentification de type http Basic.
  • Le fichier htdocs/core/login/functions_ldap.php vérifie la validité d'un couple user/mot de passe dans un annuaire LDAP.
  • Le fichier htdocs/core/login/functions_dolibarr.php vérifie la validité d'un couple user/mot de passe dans la base de donnée 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 du fichier conf/conf.php. Dans ce fichier, Dolibarr sollicite la seule fonction qui s'y trouve en envoyant comme paramètres le user et mot de passe.La fonction renvoie vrai si le couple est valide.

Outils personnels
  • Ask to contact@dolibarr.org to request an account to contribute to this documentation
  • Connexion
Autres langues
AnglaisEspagnolAllemand
Pas de traduction en Allemand.
Italien
Pas de traduction en Italien.

Social networks
Follow us on Facebook Follow us on LinkedIn Follow us on Twitter