Serveur Apache HTTP Version 2.5
Description: | Permet à une application d'autorisation FastCGI de gérer l'authentification et l'autorisation httpd. |
---|---|
Statut: | Extension |
Identificateur de Module: | authnz_fcgi_module |
Fichier Source: | mod_authnz_fcgi.c |
Compatibilité: | Disponible à partir de la version 2.4.10 du serveur HTTP Apache |
Ce module permet aux applications d'autorisation FastCGI d'authentifier les utilisateurs et de contrôler leur accès aux ressources. Il supporte les systèmes d'autorisation FastCGI génériques qui participent en une seule phase à l'authentification et à l'autorisation, ainsi que les processus d'authentification et d'autorisation spécifiques à Apache httpd qui interviennent en une ou plusieurs phases.
Les processus d'autorisation FastCGI peuvent authentifier un utilisateur via son identificateur et son mot de passe comme dans le processus d'authentification basique, ou via un mécanisme arbitraire.
Les modes d'invocation des processus d'autorisation FastCGI que ce module supporte se distinguent par deux caractéristiques : le type et le mécanisme d'authentification.
Le Type est simplement authn
pour
l'authentification, authz
pour l'autorisation et
authnz
l'authentification et l'autorisation.
Le mécanisme d'authentification fait référence aux
mécanismes d'authentification et aux phases de traitement de la
configuration de Apache httpd, et peut être
AuthBasicProvider
, Require
, ou
check_user_id
. Les deux premiers mécanismes
correspondent aux directives utilisées pour participer aux phases de
traitement appropriées.
Description de chaque mode:
authn
, mechanism
AuthBasicProvider
FCGI_ROLE
est définie à
AUTHORIZER
, et la variable
FCGI_APACHE_ROLE
à AUTHENTICATOR
.
L'application doit être spécifiée en tant que fournisseur de type
authn via la directive AuthnzFcgiDefineProvider
, et
activée via la directive AuthBasicProvider
. Lorsqu'elle
est invoquée, l'application est censée authentifier le client à
l'aide de l'identifiant et du mot de passe de l'utilisateur.
Exemple d'application :
#!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while ($request->Accept() >= 0) { die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR"; die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER"; die if !$ENV{'REMOTE_PASSWD'}; die if !$ENV{'REMOTE_USER'}; print STDERR "This text is written to the web server error log.\n"; if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") && $ENV{'REMOTE_PASSWD'} eq "bar" ) { print "Status: 200\n"; print "Variable-AUTHN_1: authn_01\n"; print "Variable-AUTHN_2: authn_02\n"; print "\n"; } else { print "Status: 401\n\n"; } }Exemple de configuration httpd :
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/ <Location "/protected/"> AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthn Require ... </Location>
authz
, mechanism
Require
FCGI_ROLE
est définie à
AUTHORIZER
et FCGI_APACHE_ROLE
à
AUTHORIZER
. L'application doit être spécifiée en tant
que fournisseur de type authz via la directive AuthnzFcgiDefineProvider
.
Lorsqu'elle est invoquée, l'application est censée contrôler les
accès du client à l'aide de l'identifiant utilisateur et d'autres
données contenues dans la requête. Exemple d'application :
#!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while ($request->Accept() >= 0) { die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHORIZER"; die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER"; die if $ENV{'REMOTE_PASSWD'}; print STDERR "This text is written to the web server error log.\n"; if ($ENV{'REMOTE_USER'} eq "foo1") { print "Status: 200\n"; print "Variable-AUTHZ_1: authz_01\n"; print "Variable-AUTHZ_2: authz_02\n"; print "\n"; } else { print "Status: 403\n\n"; } }Exemple de configuration httpd :
AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10103/ <Location "/protected/"> AuthType ... AuthName ... AuthBasicProvider ... Require FooAuthz </Location>
authnz
, mechanism
AuthBasicProvider
+ Require
FCGI_ROLE
est
définie à AUTHORIZER
et FCGI_APACHE_ROLE
n'est pas définie. L'application doit être spécifiée en tant que
fournisseur de type authnz via la directive AuthnzFcgiDefineProvider
.
L'application est censée assurer l'authentification et
l'autorisation au cours d'une même invocation à l'aide de
l'identifiant et du mot de passe de l'utilisateur et d'autres
données contenues dans la requête. L'invocation de l'application
intervient au cours de la phase d'authentification de l'API Apache
httpd. Si l'application renvoie le code 200, et si le même
fournisseur est invoqué au cours de la phase d'autorisation (via
une directive Require
), mod_authnz_fcgi
renverra un code de type success pour la phase d'autorisation sans
invoquer l'application. Exemple d'application :
#!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while ($request->Accept() >= 0) { die if $ENV{'FCGI_APACHE_ROLE'}; die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER"; die if !$ENV{'REMOTE_PASSWD'}; die if !$ENV{'REMOTE_USER'}; print STDERR "This text is written to the web server error log.\n"; if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") && $ENV{'REMOTE_PASSWD'} eq "bar" && $ENV{'REQUEST_URI'} =~ m%/bar/.*%) { print "Status: 200\n"; print "Variable-AUTHNZ_1: authnz_01\n"; print "Variable-AUTHNZ_2: authnz_02\n"; print "\n"; } else { print "Status: 401\n\n"; } }Exemple de configuration httpd :
AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/ <Location "/protected/"> AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthnz Require FooAuthnz </Location>
authn
, mechanism
check_user_id
FCGI_ROLE
est définie à
AUTHORIZER
et FCGI_APACHE_ROLE
à
AUTHENTICATOR
. L'application doit être spécifiée en
tant que fournisseur de type authn via une directive
AuthnzFcgiDefineProvider
. La
directive AuthnzFcgiCheckAuthnProvider
permet de l'invoquer. Exemple d'application :
#!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while ($request->Accept() >= 0) { die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR"; die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER"; # This authorizer assumes that the RequireBasicAuth option of # AuthnzFcgiCheckAuthnProvider is On: die if !$ENV{'REMOTE_PASSWD'}; die if !$ENV{'REMOTE_USER'}; print STDERR "This text is written to the web server error log.\n"; if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") && $ENV{'REMOTE_PASSWD'} eq "bar" ) { print "Status: 200\n"; print "Variable-AUTHNZ_1: authnz_01\n"; print "Variable-AUTHNZ_2: authnz_02\n"; print "\n"; } else { print "Status: 401\n\n"; # If a response body is written here, it will be returned to # the client. } }Exemple de configuration httpd :
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10103/ <Location "/protected/"> AuthType ... AuthName ... AuthnzFcgiCheckAuthnProvider FooAuthn \ Authoritative On \ RequireBasicAuth Off \ UserExpr "%{reqenv:REMOTE_USER}" Require ... </Location>
AUTHENTICATOR
et
AUTHORIZER
), vous pouvez définir des fournisseurs
séparés comme suit, même s'ils correspondent à la même application :
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/ AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10102/Spécifie le fournisseur authn via la directive
AuthBasicProvider
et le fournisseur authz via la directive
Require
:
AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthn Require FooAuthz
AUTHORIZER
(authentification et autorisation en une
seule invocation), vous pouvez définir un fournisseur unique comme
suit :
AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/Spécifie le fournisseur authnz via les directives
AuthBasicProvider
et
Require
:
AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthnz Require FooAuthnz
Les fonctionnalités suivantes ne sont pas encore implémentées :
FCGI_APACHE_ROLE
est définie à ACCESS_CHECKER
.fcgistarter
permet de
les démarrer.ProxyPass
utilisée avec les répondeurs
FastCGI.error
ou supérieur.warn
.debug
.trace2
. La valeur de la
variable REMOTE_PASSWD
sera occultée, mais
toute autre donnée sensible sera visible dans le
journal.trace5
. Toutes les données sensibles seront
visibles dans le journal.La directive LogLevel
permet
de configurer un niveau de journalisation spécifique à
mod_authnz_fcgi. Par exemple :
LogLevel info authnz_fcgi:trace8
Description: | Permet à une application FastCGI de gérer l'accroche d'authentification check_authn. |
---|---|
Syntaxe: | AuthnzFcgiCheckAuthnProvider provider-name| |
Défaut: | none |
Contexte: | répertoire |
AllowOverride: | FileInfo |
Statut: | Extension |
Module: | mod_authnz_fcgi |
Cette directive permet de confier à une application FastCGI la gestion d'une phase spécifique du processus d'authentification ou d'autorisation.
Certaines fonctionnalités des fournisseurs d'autorisation FastCGI
nécessitent cette directive en lieu et place de
AuthBasicProvider
pour pouvoir être activées :
UserExpr
ci-dessousAuthnzFcgiDefineProvider
.None
None
pour désactiver un fournisseur
activé avec cette même directive dans une autre portée, par
exemple dans un répertoire parent.UserExpr
est défini et correspond à une chaîne
vide, (par exemple, si le fournisseur d'autorisation ne renvoie
aucune variable), c'est cette valeur qui sera utilisée comme id
utilisateur par défaut. Cela se produit souvent lorsqu'on se trouve dans
un contexte d'invité, ou d'utilisateur non authentifié ;
les utilisateurs et invités se voient alors attribué un id
utilisateur spécifique qui permettra de se connecter et
d'accéder à certaines ressources.Variable-XXX
renvoyée par le
fournisseur d'autorisation via une option du style
UserExpr "%{reqenv:XXX}"
. Si cette option
est spécifiée, et si l'id utilisateur ne peut pas être définie
via l'expression après une authentification réussie, la requête
sera rejetée avec un code d'erreur 500.Description: | Définit une application FastCGI en tant que fournisseur d'authentification et/ou autorisation |
---|---|
Syntaxe: | AuthnzFcgiDefineProvider type provider-name
backend-address |
Défaut: | none |
Contexte: | configuration du serveur |
Statut: | Extension |
Module: | mod_authnz_fcgi |
Cette directive permet de définir une application FastCGI en tant que fournisseur pour une phase particulière d'authentification ou d'autorisation.
AuthBasicProvider
et
Require
.fcgistarter
.