Ces derniers temps, je vous ai présenté plusieurs articles traitant du concept de SSO :

Mais finalement, on oublie une question : Comment fait-on si l'application que l'on souhaite protéger n'a pas de module SSO ?

On peut imaginer plusieurs réponses, notamment le fait de développer l'intégration. Mais si on n'est pas développeur, cela risque d'être compliqué, d'autant plus que ce n'est pas la fonctionnalité la plus simple à développer 😬 !

Mais aujourd'hui, je vais vous présenter le module mod_auth_openidc intégré au serveur Web Apache2.

Globalement, c'est le même fonctionnement que Authelia, le SSO sera implémenté sur la brique du serveur web et non sur le code de l'application. Ce module sera considéré comme "client" au niveau de Keycloak.

Installation

Cela nécessite bien évidemement que le paquet apache2 soit installé sur votre machine.

Installons ce module :

sudo apt-get install libapache2-mod-auth-openidc

Puis l'activer si ce n'est pas déjà le cas :

sudo a2enmod auth_openidc

Et redémarrer le service :

sudo systemctl restart apache2

Création du client sous Keycloak

Maintenant que notre module est prêt à être implémenté dans un VirtualHost, nous allons devoir créer un client sous Keycloak, vous connaissez la procédure maintenant à travers nos articles précédents, mais voici les paramètres à ajouter (à adapter en fonction de votre configuration) :

  • Client ID : application_1
  • Name : Application_1
  • Client Protocol : openid-connect
  • Access Type : confidential

  • Root URL : http(s)://URLdeVotreAppli
  • Valid Redirect URLs : http(s)://URLdeVotreAppli/*
  • Admin URL : http(s)://URLdeVotreAppli
  • Web Origins : http(s)://URLdeVotreAppli

Laissez le reste par défaut. Puis cliquez sur Save.

Vous pouvez à présent récupérer le secret de ce client, accessible à la rubrique "Credentials" :

Configuration du VirtualHost

Pour cette partie, considérons que votre Vhost est configuré pour pointer vers le site désiré.

Il ne suffit que de rajouter la partie authentification :

OIDCCryptoPassphrase <SecretGénéréAleatoirement>
OIDCProviderMetadataURL https://URL_De_Votre_Instance_Keycloak/auth/realms/Votre_Realm/.well-known/openid-configuration
OIDCClientID application_1
OIDCClientSecret <Secret_De_Votre_Appli>
OIDCRedirectURI http(s)://URLdeVotreAppli/index.html

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

Pour générer la valeur de OIDCCryptoPassphrase, tapez la commande suivante :

openssl rand -hex 16

Dans la mesure où le site est déjà activé, il ne suffit qu'à redémarrer le service Apache :

sudo systemctl restart apache2

Tester

Tout est configuré ! Lorsque vous allez visiter l'URL de votre service, vous serez automatiquement redirigé vers la page d'authentification Keycloak.

Pour plus d'informations sur le sujet ➡️ https://github.com/zmartzone/mod_auth_openidc