Karrigell Documentation

Version 2.2.5 13 05 06

English

15. Authentification

Karrigell prend en charge l'authentification HTTP de base, une façon de protéger l'accès à certains fichiers en demandant un identifiant d'utilisateur et un mot de passe. Le serveur reçoit les données fournies et les enregistre dans les variables globales AUTH_USER et AUTH_PASSWORD. Si l'utilisateur fournit un couple qui est autorisé par le serveur, la page lui est envoyée ; si ce couple n'est pas reconnu comme valide on lui en redemande un autre ; si l'utilisateur annule sa demande un message d'erreur lui est envoyé

Avec Karrigell, l'authentification est gérée à travers la fonction Authentication ; appeler Authentication(fonctionTest[,royaume, messageErreur])fonctionTest est une fonction sans argument définie par l'utilisateur qui renvoie vrai si le test d'authentification réussit (en fonction des valeurs de AUTH_USER et de AUTH_PASSWORD) et faux sinon, royaume est une chaîne contenant le nom du domaine d'authentification (celui qui va apparaître sur la fenêtre de demande d'identifiant et mot de passe) et messageErreur est la chaîne de caractères affichée sur le navigateur si l'utilisateur annule sa demande d'authentification. royaume et messageErreur ont tous les deux des valeurs par défaut

Voici un exemple avec une fonction de test très simple :

<%
def testAuth():
    return (AUTH_USER=="proust" and AUTH_PASSWORD=="marcel")
Authentication(testAuth,"Test d'authentification",\
    "Désolé, vous n'êtes pas autorisé à accéder à cette page")
%>
Bienvenue, utilisateur autorisé !

Avec une telle fonction de test, si un visiteur trouve un moyen de lire le code source, il découvrira facilement un couple identifiant/mot de passe valide. Une meilleure solution est d'utiliser md5 : c'est une fonction qui prend une chaîne de caractères comme argument et qui retourne un "condensé" de 16 octets. On est sûr que les condensés de deux chaînes différentes seront différents, et il est impossible de retrouver la chaîne d'origine quand on ne connaît que son condensé
Une bonne méthode consiste à calculer les condensés md5 de l'identifiant et du mot de passe, et des les stocker dans un fichier. Le test d'authentification lira ce fichier, calculer les condensés de AUTH_USER et AUTH_PASSWORD, et retournera vrai si les condensés correspondent

<%
import md5
digests=open("digest.ini","rb").read()
userDigest=digests[:16]
passwordDigest=digests[16:]
def authTest():
    return (md5.new(AUTH_USER).digest()==userDigest and \
        md5.new(AUTH_PASSWORD).digest()==passwordDigest)
Authentication(authTest,"Test d'authentification",\
    "Désolé, vous n'êtes pas autorisé à accéder à cette page")
%>
Bienvenue, utilisateur autorisé !

Voir le script k_password.py, dans le répertoire admin, qui génère un fichier avec les condensés md5 de l'identifiant et du mot de passe de l'administrateur