Apache Resourcen schützen mit mod_auth_openidc und Keycloak
Soll der Zugriff auf eine Seite oder einen Ordner des Apaches eingeschränkt werden, kommt meist ein schnelles BasicAuth zum Einsatz. Hat man jedoch ein Identity Provider wie Keycloak im Einsatz, kann der Zugriff auch mittels OpenID-Connect eingeschränkt werden.
In diesem Beispiel wollen wir die Webseite secure.example.org mit unserem Keycloak keycloak.example.org absichern.
Wir haben bereits ein Realm myrealm angelegt und natürlich auch ein Benutzer.
So, zuerst loggen wir uns in unserem Keycloak ein und wählen den entsprechenden Realm aus.
Jetzt klickt ihr in der linken Navigation auf Clients
und in der Übersicht dann auf Create client
.
Der Client type bleibt natürlich OpenID Connect. Als Client-ID trage ich immer die Domain der Seite ein, für die der Keycloak die Authentifizierung übernehmen soll:
Client type: OpenID Connect
Client ID: secure.example.org
Anschließend klicken wir auf Next
.
Auf der nächsten Konfigurationsseite (Capability config) schalten wir die Client authentcation ein:
Client authentication: On
Und mit Next
weiter zur nächsten Seite.
Hier (Login settings) wird die redirect URI eingetragen, zu der Keycloak weiterleiten darf. Also die URI unser zu schützenden Resource.
Valid Redirect URIs: https://secure.example.org/*
Nach einem Klick auf Save, taucht oben ein Tab Credentials auf.
Hier gibt es dann ein Feld Client Secret
, dessen Wert wir gleich in der Apachekonfiguration benötigen.
Daher wechseln wir jetzt zu dem Indianer und installieren und aktiviren erstmal das benötigte Apache-Modul:
sudo apt update && sudo apt -y install libapache2-mod-auth-openidc
sudo a2enmod auth_openidc
sudo systemctl restart apache2
Jetzt gehen wir in die Konfigurationsdatei des Apache vHosts, den ihr schützen wollt und fügt folgenden Inhalt ein:
# Auth OIDCProviderMetadataURL https://keycloak.example.org/realms/myrealm/.well-known/openid-configuration OIDCClientID secure.example.org OIDCClientSecret 987654321abcdefghijklmnopqrst OIDCRedirectURI https://secure.example.org/redirect_uri OIDCCryptoPassphrase xyz123abc987qtp486 <Location /> AuthType openid-connect Require valid-user </Location>
Die Felder Client-ID und ClientSecret müssen den Daten aus dem Keycloak entsprechen. Die CryptoPassphrase könnt ihr frei wählen.
Anschließend den Apache neu starten:
sudo systemctl restart apache2
Wenn wir jetzt die URL http://secure.example.org aufgerufen, werden wir zum Keycloak zur Authentifizierung weitergeleitet. Nach der erfolgreichen Authentifizierung, schickt der Keycloak uns wieder zur ursprünglichen URL zurück.
Fertig!