L’une des façons les plus rapides de faire une authentification sur le net est de passer par un fichier htaccess et un htpasswd. C’est à dire mettre dans un fichier le login et le mot de passe (crypté). Le problème c’est que si cette solution permet de mettre facilement et rapidement un contenu derrière une protection par authentification, elle est cependant guerre poussée et évolutive.
Nous allons donc voir comment modifier notre htaccess (ou encore mieux, notre vHost) pour aller chercher l’information dans une base de données via le module apache mod_auth_mysql. Nous verrons cela au travers d’un exemples : l’identification sur un Trac via les identifiants d’un FluxBB.
Trac et l’identification
Trac n’offre pas de zone membre à proprement parlé. Toute personne qui s’identifie à Trac voit son compte automatiquement crée. Il en résulte qu’on peu donc affecter des droits à un compte qui n’a pas encore était crée. Mais alors comment s’authentifier ? C’est justement là la force de Trac : on peut s’identifier par la méthode que l’on souhaite. Dans un premier temps j’étais passé par un htpasswd mais à présent je désire m’authentifier avec l’identifiant et le mot de passe d’un forum FluxBB.
Prérequis
Évidement il vous faudra un Trac et un FluxBB installés et configurés. Il vous faudra aussi, bien évidement, mod_auth_mysql (yum install mod_auth_mysql). Histoire de faire un cliché avant/après, voici la configuration de mon Trac avant la manipulation :
<Location />
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /home/llaumgui/public_html/trac.llaumgui.com/www/
PythonOption TracUriRoot /
# "/tmp" should be some writable temporary directory
SetEnv PYTHON_EGG_CACHE /tmp
# "trac" can be any string, but must be the same for all
# Trac instances on the same Apache install
PythonInterpreter trac
</Location>
<Location /login>
AuthType Basic
AuthName "Connection sur les dev de LLaumgui"
AuthUserFile /home/llaumgui/public_html/trac.llaumgui.com/trac.htpasswd
Require valid-user
</Location>
On y remarque que l’identification se fait au travers du fichier /home/llaumgui/public_html/trac.llaumgui.com/trac.htpasswd.
Connexion
On va maintenant passer à une identification MySQL :
Order deny,allow
Deny from all
AuthName "Veuillez saisir votre nom d'utilisateur et votre mot de passe Dotclear"
AuthType Basic
require valid-user
Satisfy Any
AuthMySQLAuthoritative On
AuthMySQLEnable On
# On se connecte à la base mon_fluxbb du serveur localhost
# Bien sûr l'idéal est qu'apache n'est accès à mon_fluxbb qu'en lecture.
AuthMySQLHost localhost
AuthMySQLUser apache
AuthMySQLPassword mon_mot_de_passe
AuthMySQLDB mon_fluxbb
# La table contenant la liste des utilisateur dans FluxBB est la table fluxbb_user
# Le login correspond à username et le mot de passe à password
# Dans FluxBB, les mots de passe sont crypté en sha1
AuthMySQLUserTable fluxbb_user
AuthMySQLNameField username
AuthMySQLPasswordField password
AuthMySQLNoPasswd Off
AuthMySQLPwEncryption sha1
On constate que le choix des méthodes d’encryptages est limité à crypt, scrambled, md5, aes et sha1. Il n’est donc malheureusement pas possible de connecter un Trac avec un Dotclear. En effet, pour le cryptage des mots de passe, Dotclear passe par crypt::hmac.
mod_auth_mysql permet aussi des requêtes plus complexes avec des jointures sur d’autres tables et des clauses where, pour plus d’information, la documentation devrait vous aider.