Ce module fournit un socle de fonctionnalités d'autorisation
permettant d'accorder ou refuser l'accès à certaines zones du site
web aux utilisateurs authentifiés.
Les directives de conteneur d'autorisation
L'exemple ci-dessous illustre la logique d'autorisation suivante.
Pour pouvoir accéder à la ressource, l'utilisateur doit être
l'utilisateur superadmin
, ou appartenir aux deux
groupes LDAP admins
et Administrateurs
et
soit appartenir au groupe ventes
, soit avoir
ventes
comme valeur de l'attribut LDAP
dept
. De plus, pour pouvoir accéder à la ressource,
l'utilisateur ne doit appartenir ni au groupe temps
, ni
au groupe LDAP Employés temporaires
.
Le module
Le fournisseur env
permet de contrôler l'accès au
serveur en fonction de l'existence d'une variable d'environnement. Lorsque Require
env env-variable
est spécifié, la requête se voit
autoriser l'accès si la variable d'environnement
env-variable existe. Le serveur permet de définir
facilement des variables d'environnement en fonction des
caractéristiques de la requête du client via les directives fournies
par le module User-Agent
(type de navigateur), Referer
,
entre autres.
Avec cet exemple, les navigateurs dont la chaîne user-agent
commence par KnockKnock/2.0
se verront autoriser
l'accès, alors que tous les autres seront rejetés.
Lorsque le serveur cherche un chemin via une
Le fournisseur all
reproduit la fonctionnalité
précédemment fournie par les directives 'Allow from all' et 'Deny
from all'. Il accepte un argument dont les deux valeurs possibles
sont : 'granted' ou 'denied'. Les exemples suivants autorisent ou
interdisent l'accès à toutes les requêtes.
Le fournisseur method
permet d'utiliser la méthode
HTTP dans le processus d'autorisation. Les méthodes GET et HEAD sont
ici considérées comme équivalentes. La méthode TRACE n'est pas
supportée par ce fournisseur ; utilisez à la place la directive
Dans l'exemple suivant, seules les méthodes GET, HEAD, POST, et OPTIONS sont autorisées :
Dans l'exemple suivant, les méthodes GET, HEAD, POST, et OPTIONS sont autorisées sans authentification, alors que toutes les autres méthodes nécessitent un utilisateur valide :
Le fournisseur expr
permet d'accorder l'autorisation
d'accès en fonction d'expressions arbitraires.
La syntaxe de l'expression est décrite dans la documentation de ap_expr. Avant la version 2.4.16, les doubles-quotes étaient prohibées.
Normalement, l'expression est évaluée avant l'authentification.
Cependant, si l'expression renvoie false et se réfère à la variable
%{REMOTE_USER}
, le processus d'authentification sera
engagé et l'expression réévaluée.
Il est possible de créer des fournisseurs d'autorisation étendus
dans le fichier de configuration et de leur assigner un nom d'alias.
On peut ensuite utiliser ces fournisseurs aliasés dans une
directive
Dans l'exemple suivant, on crée deux alias de fournisseur d'autorisation ldap différents basés sur le fournisseur d'autorisation ldap-group. Il est ainsi possible pour un seul répertoire de vérifier l'appartenance à un groupe dans plusieurs serveurs ldap :
Cette directive permet de vérifier si un utilisateur authentifié
a l'autorisation d'accès accordée pour un certain fournisseur
d'autorisation et en tenant compte de certaines restrictions.
Require all granted
Require all denied
Require env env-var [env-var]
...
Require method http-method [http-method]
...
Require expr expression
Voici quelques exemples de syntaxes autorisées par
Require user identifiant utilisateur
[identifiant utilisateur]
...
Require group nom groupe [nom
groupe]
...
Require valid-user
Require ip 10 172.20 192.168.2
Require forward-dns dynamic.example.org
D'autres modules d'autorisation comme
Pour qu'une configuration d'authentification et d'autorisation
fonctionne correctement, la directive
Les contrôles d'accès appliqués de cette manière sont effectifs
pour toutes les méthodes. C'est d'ailleurs
ce que l'on souhaite en général. Si vous voulez n'appliquer
les contrôles d'accès qu'à certaines méthodes, tout en laissant les
autres méthodes sans protection, placez la directive
Le résultat de la directive not
. Comme dans le
cas de l'autre directive d'autorisation inversée
Dans l'exemple suivant, tous les utilisateurs appartenant aux
groupes alpha
et beta
ont l'autorisation
d'accès, à l'exception de ceux appartenant au groupe
reject
.
Lorsque plusieurs directives
Prettez une attention particulière aux directives d'autorisation
définies
au sein des sections
La directive
Les balises </RequireAll>
permettent de regrouper des
directives d'autorisation dont aucune ne doit échouer, et dont au
moins une doit retourner un résultat positif pour que la directive
Si aucune des directives contenues dans la directive
Les balises </RequireAny>
permettent de regrouper des
directives d'autorisation dont au moins une doit retourner un
résultat positif pour que la directive
Si une ou plusieurs directives contenues dans la directive
Les balises </RequireNone>
permettent de regrouper des
directives d'autorisation dont aucune ne doit retourner un résultat
positif pour que la directive
Si une ou plusieurs directives contenues dans la directive
Require
not
, elle ne peut jamais en soi autoriser une requête
car elle ne pourra jamais retourner un résultat
positif. Par contre, on peut l'utiliser pour restreindre l'ensemble
des utilisateurs autorisés à accéder à une ressource.
Lorsque l'autorisation est activée, elle est normalement héritée
par chaque section de
configuration suivante, à moins qu'un jeu de directives
d'autorisations différent ne soit spécifié. Il s'agit du
comportement par défaut, qui correspond à la définition explicite
AuthMerging Off
.
Dans certaines situations cependant, il peut être souhaitable de
combiner la logique d'autorisation d'une section de configuration
avec celle de la section précédente lorsque les sections de
configuration se combinent entre elles. Dans ce cas, deux options
sont disponibles, And
et Or
.
Lorsqu'une section de configuration contient AuthMerging
And
ou AuthMerging Or
, sa logique d'autorisation
se combine avec celle de la section de configuration qui la précède
(selon l'ordre général des sections de configuration), et qui
contient aussi une logique d'autorisation, comme si les deux
sections étaient concaténées, respectivement, dans une directive
alpha
sont
autorisés à accéder à /www/docs
. Les utilisateurs
appartenant au groupe alpha
ou au groupe
beta
sont autorisés à accéder à
/www/docs/ab
. Cependant, la définition implicite à
Off
de la directive /www/docs/ab/gamma
, ce qui implique que les directives
d'autorisation de cette section l'emportent sur celles des sections
précédentes. Par voie de conséquence, seuls les utilisateurs
appartenant au groupe gamma
sont autorisés à accéder à
/www/docs/ab/gamma
.Les balises </AuthzProviderAlias>
permettent de regrouper des
directives d'autorisation auxquelles on pourra faire référence à
l'aide de l'alias spécifié dans une directive
Si Require-Parameters comporte plusieurs paramètres, la liste de ces derniers doit être entourée de guillemets. Dans le cas contraire, seul le premier paramètre de la liste sera pris en compte.
Par défaut, si l'authentification réussit, alors que
l'autorisation est refusée, Apache HTTPD renvoie un code de réponse
HTTP '401 UNAUTHORIZED'. En général, les navigateurs proposent alors
une nouvelle fois à l'utilisateur la boîte de dialogue de saisie du
mot de passe, ce qui n'est pas toujours souhaitable. La directive
La modification de la réponse en cas de refus d'autorisation diminue la sécurité du mot de passe, car elle indique à un éventuel attaquant que le mot de passe qu'il a saisi était correct.