Ces derniers temps, je vous ai présenté plusieurs articles traitant du concept de SSO :
- Comment nous avons créé une architecture SSO : Nextcloud + Keycloak + YubiKey
- Les différents modes d'authentification sous Keycloak
- Authelia - Une solution de SSO pour vos microservices
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