Accueil > OpenID Connect OAuth Serveur dédié > Développer > APACHE mod_auth_openidc

APACHE mod_auth_openidc

APACHE mod_auth_openidc est un module d’authentification pour le serveur HTTP Apache 2.x qui délègue l’authentification des utilisateurs à un fournisseur OpenID Connect. Cela permet de contrôler l’accès à tout ou partie d’un domaine Web.

Il est ainsi possible d’accéder à des applications sans avoir à les modifier pour OIDC.

Ce module permet à un serveur Web Apache 2.x de fonctionner en tant que partie de confiance OpenID Connect (RP) ou ’client’ d’un fournisseur OpenID Connect (OP).

Il délègue l’authentification des utilisateurs à l’OP, dont il reçoit en retour un jeton d’identité (ID Token) contenant les informations d’identité de l’utilisateur.
Il transmet ces informations aux applications hébergées et protégées par le serveur Web Apache.

Le contenu et/ou les applications protégés peuvent être servis par le serveur Apache lui-même ou peuvent être servis depuis un autre endroit lorsqu’Apache est configuré en tant que proxy inverse devant le(s) serveur(s) d’origine.

See : https://github.com/zmartzone/mod_auth_openidc

Préparation

Tout d’abord il faut vérifier la présence du module mod_auth_openidc :

# apachectl -M
...
auth_openidc_module (shared)
...

Si absent, il faut installer le module mod_auth_openidc.so :

# yum install mod_auth_openidc
...

et relancer Apache.

Configurer un VirtualHost

Dans l’exemple qui suit, un serveur à l’URL example.com comporte un répertoire ’/protected’ protégé par OIDC.

Il y a trois sections dans cet exemple : d’abord la définition du serveur, puis la configuration OIDC et enfin la définition d’un emplacement protégé par OIDC.

NameVirtualHost *:80

<VirtualHost *:80>
   ServerAdmin webmaster@example.com
   ServerName example.com
   ServerAlias www.example.com
   DocumentRoot /home/example/public_html/
   DirectoryIndex index.html
   ErrorLog /var/log/oidc/error.log
   CustomLog /var/log/oidc/access.log

   OIDCProviderMetadataURL https://oa.dnc.global/.well-known/openid-configuration
   OIDCClientID openidc_example
   OIDCClientSecret ...
   OIDCRedirectURI http://example.com/protected/redirect_uri
   OIDCCryptoPassphrase <password>
   OIDCJWKSRefreshInterval 3600

   <Location /protected/>
      AuthType openid-connect
      Require valid-user
   </Location>

</VirtualHost>

- OIDCProviderMetadataURL : URL du document de découverte (Discovery metadata). Par convention il s’agit du fichier openid-configuration se trouvant à la racine des documents de l’OP dans le répertoire /.well-known/.
- OIDCClientID, OIDCClientSecret : les identifiants du module en tant que client de l’OP (ou relying party, RP).
- OIDCRedirectURI : une URI factice qui doit pointer dans un répertoire protégé par ce module (dans notre exemple à l’intérieur du répertoire ’protected’) mais ne doit PAS pointer vers un contenu. Il faut l’enregistrer en tant qu’URI de redirection dans la configuration du client sur l’OP.
- OIDCCryptoPassphrase : un mot de passe aléatoire à des fins de cryptage de la session.
- OIDCJWKSRefreshInterval : Durée de vie de l’authentification.

Déclarations renvoyées depuis OpenID Connect via le module Apache

Le module passe les déclarations du jeton d’identité ID_TOKEN aux applications hébergées et protégées par le serveur web Apache.

Par défaut, le module définit la variable REMOTE_USER sur la revendication id_token [sub], concaténée avec l’identifiant de l’émetteur de l’OP ([sub]@[iss]).

Les autres déclarations du jeton d’identité ID_TOKEN sont transmises dans les en-têtes HTTP et/ou les variables d’environnement avec celles (éventuellement) obtenues à partir du point de terminaison UserInfo.

La super globale $_SERVER contient ces déclarations sous la forme :
OIDC_XXX

On peut par exemple les lister comme suit :
PHP

  1. foreach ($_SERVER as $key=>$value) {
  2.     if ( preg_match("/OIDC_/i", $key) ) {
  3.         echo "$key : $value";
  4.     }
  5. }

Télécharger

Autorisation Apache Require

Les règles d’autorisation Apache Require standard peuvent être appliquées avec l’ensemble des déclarations fournies par le jeton d’identité.

...