mod_auth_digest
Authentification utilisateur utilisant les condensés MD5
Extension
mod_auth_digest.c
auth_digest_module

Ce module implémente l'authentification HTTP basée sur les condensés MD5 (RFC2617), et fournit une alternative à mod_auth_basic plus sécurisée.

AuthName
AuthType
Require
Match
Mode d'emploi de l'authentification

# Utilisation de l'authentification à base de condensés

Pour utiliser l'authentification à base de condensés MD5, vous devez simplement remplacer `AuthType Basic` et AuthBasicProvider respectivement par `AuthType Digest` et AuthDigestProvider lorsque vous configurez l'authentification, puis ajouter une directive AuthDigestDomain contenant au moins la(les) URI(s) racine(s) de la zone à protéger.

On peut créer les fichiers utilisateur appropriés (au format texte) à l'aide de l'outil htdigest.

## Exemple :

<Location /private/>
AuthType Digest
AuthName "private area"
AuthDigestDomain /private/ http://mirror.my.dom/private2/
AuthDigestProvider file
AuthUserFile /web/auth/.digest_pw
Require valid-user
</Location>

## Note

L'authentification à base de condensés MD5 est plus sécurisée que l'authentification Basic, mais ne fonctionne qu'avec les navigateurs qui la supportent. En septembre 2004, les principaux navigateurs supportant l'authentification à base de condensés MD5 incluaient Amaya, Konqueror, MS Internet Explorer pour Mac OS X et Windows (bien que la version Windows échoue lorsque la requête comporte une chaîne d'arguments -- voir plus loin "Travailler avec MS Internet Explorer" pour contourner ce problème), Mozilla, Netscape 7, Opera, et Safari. lynx ne supporte pas l'authentification à base de condensés MD5. Comme l'authentification à base de condensés MD5 est moins répandue que l'authentification Basic, vous ne devez l'utiliser que dans des environnements où tous les utilisateurs disposeront d'un navigateur la supportant.

mod_auth_digest ne fonctionne correctement que sur les plates-formes où APR supporte la mémoire partagée.

# Travailler avec MS Internet Explorer

L'implémentation de l'authentification à base de condensé dans les versions précédentes d'Internet Explorer pour Windows (5 et 6) posait problème, car les requêtes de type `GET` comportant une chaîne d'arguments (query string) ne respectaient pas les RFC. Il y a plusieurs manières de contourner ce problème.

La première méthode consiste à utiliser des requêtes de type `POST` plutôt que `GET` pour transmettre les données à votre programme. Cette méthode constitue l'approche la plus simple dans le cas où votre application peut fonctionner avec cette limitation.

Depuis la version 2.0.51, Apache propose aussi de contourner le problème à l'aide de la variable d'environnement `AuthDigestEnableQueryStringHack`. Si `AuthDigestEnableQueryStringHack` est définie pour la requête, Apache va prendre des mesures pour contourner la bogue MSIE et en particulier va exclure la chaîne d'arguments de la comparaison des condensés. L'utilisation de cette méthode peut se traduire par ceci :

## Utilisation de l'authentification à base de condensé avec MSIE :

BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

Cette correction n'est pas nécessaire avec MSIE 7, bien que son activation ne pose pas de problème de compatibilité ou de surcharge significative.

Voir la directive BrowserMatch pour plus de détails à propos de la définition conditionnelle des variables d'environnement.

AuthDigestProvider
Définit le(s) fournisseurs(s) d'authentification pour la zone du site web concernée
AuthDigestProvider nom fournisseur [nom fournisseur] ...
AuthDigestProvider file
directory
.htaccess
AuthConfig

La directive AuthDigestProvider permet de définir quel fournisseur d'authentification sera utilisé pour authentifier les utilisateurs pour la zone du site web concernée. Assurez-vous que le module implémentant le fournisseur d'authentification choisi soit bien présent dans le serveur. Le fournisseur par défaut `file` est implémenté par le module mod_authn_file.

Voir mod_authn_dbm, mod_authn_file, mod_authn_dbd et mod_authn_socache pour la liste des fournisseurs disponibles.

AuthDigestQop
Détermine le niveau de protection fourni par l'authentification à base de condensé
AuthDigestQop none|auth|auth-int [auth|auth-int]
AuthDigestQop auth
directory
.htaccess
AuthConfig

La directive AuthDigestQop permet de définir le niveau de protection fourni. `auth` ne fournit que l'authentification (nom utilisateur/mot de passe) ; `auth-int` fournit l'authentification plus un contrôle d'intégrité (un condensé MD5 de l'entité est aussi calculé et vérifié) ; avec `none`, le module va utiliser l'ancien algorithme de condensés RFC-2069 (qui n'effectue pas de contrôle d'intégrité). On peut spécifier à la fois `auth` et `auth-int`, auquel cas c'est le navigateur qui va choisir lequel des deux utiliser. `none` ne doit être utilisé que dans le cas où le navigateur ne serait pas à même (pour une raison ou pour une autre) de relever le défit qu'il recevrait si un autre niveau de protection était défini.

`auth-int` n'est pas encore implémenté.

AuthDigestNonceLifetime
Durée de validité du nombre à valeur unique du serveur (nonce)
AuthDigestNonceLifetime secondes
AuthDigestNonceLifetime 300
directory
.htaccess
AuthConfig

La directive AuthDigestNonceLifetime permet de contrôler la durée de validité du nombre à valeur unique du serveur (nonce). Lorsque le client contacte le serveur en utilisant un nonce dont la validité a expiré, le serveur renvoie un code d'erreur 401 avec `stale=true`. Si secondes est supérieur à 0, il spécifie la durée de validité du nonce ; il est en général déconseillé d'affecter à cet argument une valeur inférieure à 10 secondes. Si secondes est inférieur à 0, le nonce n'expire jamais.

AuthDigestNonceFormat
Détermine la manière dont le nombre à valeur unique du serveur (nonce) est généré
AuthDigestNonceFormat format
directory
.htaccess
AuthConfig

Non encore implémenté.

AuthDigestNcCheck
Active ou désactive la vérification du nombre d'envois du nombre à valeur unique (nonce) par le serveur
AuthDigestNcCheck On|Off
AuthDigestNcCheck Off
server config

Non encore implémenté.

AuthDigestAlgorithm
Sélectionne l'algorithme utilisé pour calculer les condensés du défit et de sa réponse
AuthDigestAlgorithm MD5|MD5-sess
AuthDigestAlgorithm MD5
directory
.htaccess
AuthConfig

La directive AuthDigestAlgorithm permet de sélectionner l'algorithme utilisé pour calculer les condensés du défit et de sa réponse.

`MD5-sess` n'est pas encore correctement implémenté.

AuthDigestDomain
Les URIs qui se trouvent dans le même espace de protection concernant l'authentification à base de condensés
AuthDigestDomain URI [URI] ...
directory
.htaccess
AuthConfig

La directive AuthDigestDomain vous permet de spécifier un ou plusieurs URIs se trouvant dans le même espace de protection (c'est à dire utilisant le même utilisateur/mot de passe et se trouvant dans le même domaine). Les URIs spécifiés sont des préfixes ; le client doit savoir que tous les URIs situés sous ces préfixes seront protégés par le même utilisateur/mot de passe. Les URIs peuvent être soit des URIs absolus (c'est à dire avec protocole, nom serveur, port, etc...), soit des URIs relatifs.

Cette directive doit toujours être présente et contenir au moins le(s) URI(s) racine(s) pour cet espace. Dans le cas contraire, le client va envoyer un en-tête d'autorisation avec chaque requête à destination de ce serveur. Outre une augmentation de la taille de la requête, les performances vont s'en trouver affectées si la directive AuthDigestNcCheck est définie à On.

Les URIs spécifiés peuvent aussi référencer différents serveurs, auquel cas les clients (qui sont à même de le comprendre) vont partager l'utilisateur/mot de passe entre plusieurs serveurs sans le demander à l'utilisateur à chaque fois.

AuthDigestShmemSize
La quantité de mémoire partagée à allouer afin de conserver les informations à propos des clients
AuthDigestShmemSize taille
AuthDigestShmemSize 1000
server config

La directive AuthDigestShmemSize permet de définir la quantité de mémoire partagée à allouer au démarrage du serveur afin de conserver les informations à propos des clients. Notez que le segment de mémoire partagée ne peut pas être défini à une taille inférieure à l'espace nécessaire pour conserver les informations à propos d'un client. Cette valeur dépend de votre système. Si vous voulez en déterminer la valeur exacte, vous pouvez simplement définir AuthDigestShmemSize à `0` et consulter le message d'erreur que renverra le serveur lorsqu'on essaiera de le démarrer.

L'argument size s'exprime par défaut en octets, mais vous pouvez suffixer le nombre par un `K` ou un `M` pour spécifier respectivement des KiloOctets ou des MégaOctets. Par exemple, les directives qui suivent sont toutes équivalentes :

AuthDigestShmemSize 1048576
AuthDigestShmemSize 1024K
AuthDigestShmemSize 1M