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]]
+
[[es:Autentificación]]
+
[[zh:认证]]
+
<!-- END interlang links -->
+
+
[[Category:Noyau]]
{{TemplateDocDev}}
{{TemplateDocDev}}
−
== 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:
−
<pre>
−
<index.php>
−
<pre.inc.php>
−
<main.inc.php>
−
<master.inc.php>
−
#1#
−
</master.inc.php>
−
#2#
−
</main.inc.php>
−
</pre.inc.php>
−
</index.php>
−
</pre>
−
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 l'exécution de code propre à l'authentification: La verification que l'on ait dans une session loguée et si ce n'est pas le cas l'affichage de l'écran de login. C'est la que l'objet utilisateur est initialisé:
−
L'exécution du login, elle, se présente comme suit:
−
$authmode=array('http','dolibarr');
−
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;
−
}
+
= 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:
+
+
{{Template:CodeSampleForLoginProcess}}
+
+
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"]))".
−
Mais analysons plus en détail le code d'appel de la méthode de vérification du couple user/password (il y a plusieurs méthodes disponibles, donc plusieurs appels possibles et qui devraient être mutuellement exclusifs).
+
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.
−
session_name("DOLSESSID_".$dolibarr_main_db_name);
+
= Les mode d'authentification et modules de login =
−
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 ==
+
L'appel de checkLoginPassEntity pour valider le couple utilisateur/mot de passe (ou uniquement l'utilisateur dans certains cas) appellera la fonction '''check_user_password_xxx''' d'un module de connexion. Le module de connexion appelé dépend du mode d'authentification défini dans votre fichier '''conf/conf.php'''.
−
Les modules de login sont les fichiers qui contiennent les fonctions qui controlent la validite d'un couple user/password.
+
Le fichier utilisé est nommé '''htdocs/core/login/functions_xxx.php''' avec la valeur '''xxx''' qui correspond à la valeur définie dans '''dolibarr_main_authentication''' dans le fichier de configuration '''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'''.
+
Voir [[Authentication,_SSO_and_SSL]] pour une liste des modes d'authentification (valeurs possibles pour 'xxx' et leur spécificité)
−
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.