16. Authentification
16.1 Authentification HTTP de base
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]) où 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
16.2 La fonction RestrictToAdmin()
Vous disposez d'un raccourci pour restreindre l'accès à une page à l'administrateur dont l'
identifiant et le mot de passe ont été définis par le script k_password.py : une fonction
appelée RestrictToAdmin()
Mettez-la au début de votre script, de cette façon :
RestrictTo Admin()
print "Bonjour !"
Le navigateur demandera les informations sur l'administrateur avant d'afficher la page
Par défaut, ces informations sont recherchées dans le fichier admin.ini dans le répertoire admin.
Si vous voulez utiliser un autre fichier, vous pouvez le préciser comme argument de la fonction
RestrictToAdmin() :
RestrictTo Admin(nom_fichier_admin)
print "Bonjour !"
Le format de ce fichier doit être le même que celui généré par k_password.py
|