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
- foreach ($_SERVER as $key=>$value) {
- echo "$key : $value";
- }
- }
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é.
...