Spip utilise un système de plugins pour gérer l’authentification. Chose rare, c’est avec des classes que c’est implémenté. 2 classes sont fournies.
Auth_ldap dans inc_auth_ldap.php3
Auth_spip dans inc_auth_spip.php3
Pour des raisons de simplicité, dans tous les cas, les informations de l’utilisateur sont stockées en base SQL pour une utilisation future.
L’accés au LDAP se fait en lecture seule, et Spip essaye différentes combinaisons pour trouver les réglages du LDAP, et l’authentification est ensuite confiée au LDAP.
Pour la version Spip, l’authentification se fait avec un challenge MD5 avec ajout de sel. Le mot de passe peut être envoyé hashé par un javascript ou en clair.
La fonction auth() fait tout le travail, et c’est un record spipesque à elle seule, 21 arguments en globals ! C’est ici que l’on vérifie les rubriques que l’utilisateur a le droit de gérer.
verifier_php_auth()
L’appel des plugins d’authentification se fait ici, ainsi que la mise en place des cookies. Pour neutraliser la fonction rester authentifié quelques jours, il faut forcer la variable $session_remember à ’non’ et modifier dans inc-login.php3 l’affichage de la question dans le HTML (une recherche sur _T(’login_rester_identifie’) permet de trouver ça facilement).
Juste un pointeur pour afficher la page en 2 étapes, login, puis password. Ces deux étapes permettent de passer des arguments au javascript pour envoyer des données en md5 avec le sel.
Tout le code utilisé par /spip_login.php3.