Hallo zusammen,
gestern schrieb ich meinen ersten Teil zu unserer Keycloak-Schulung. Hier ist die Mitschrift von Tag 2:
Installation Keycloak
Auf unserem Schulungsserver sshclient2 geben wir ein:
wget https://github.com/keycloak/keycloak/releases/download/26.4.2/keycloak-26.4.2.zip unzip keycloak-26.4.2.zip sudo mv keycloak-26.4.2 /opt/keycloak sudo mkdir /opt/ssl sudo mv .crt /opt/ssl/ sudo mv keycloak2.example.test.key /opt/ssl/ sudo openssl pkcs12 -export -in /opt/ssl/keycloak2.example.test.crt -inkey /opt/ssl/keycloak2.example.test.key -out /opt/ssl/keycloak2.example.test.p12 -passin pass:'B1Systems!' -passout pass:'B1Systems!' sudo chown tux:tux /opt/ssl/
auf dc1 (sshclient3)
sudo scp /var/lib/samba/private/tls/ca.pem keycloak2:/opt/keycloak/conf/truststores/ad.crt
auf keycloak2 (sshclient2)
sudo nano /opt/keycloak/conf/keycloak.conf
Dort kopieren wir folgendes rein:
db=mysql
http-relative-path=/keycloak
# run
db-url=jdbc:mysql://db.example.test/keycloak
db-username=keycloak
db-password=keycloak
proxy-headers=xforwarded
# beispiel für setzen der offiziellen (öffentlichen) url des IdPs
# mit "strict hostname checking" d.h. die x-forwarded-* header müssen der angabe in hostname=... entsprechen
hostname=https://www.example.test/keycloak
#hostname-strict=false
https-key-store-file=/opt/ssl/keycloak2.example.test.p12
https-key-store-password=B1Systems!
cd /opt/keycloak bin/kc.sh start
Wenn folgendes Bild erscheint, dann läuft schon mal Keycloak:

Nun richten wir den Administrator ein:
bin/kc.sh bootstrap-admin user --username admin
Hier 2 mal ein neues Passwort eingeben.
Wir können uns nun erfolgreich als Administrator anmelden:

Keycloak als Service einrichten
sudo nano /etc/systemd/system/keycloak.service
Inhalt dort rein kopieren:
[Unit]
Description=Keycloak Server on Port 8443
Requires=network-online.target
After=network-online.target
[Service]
Type=exec
ExecStart=/opt/keycloak/bin/kc.sh start --optimized
SuccessExitStatus=0 143
#User=keycloak
#Group=keycloak
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable keycloak.service --now
Mit
sudo systemctl start keycloak
starten wir den Dienst. Gestoppt wird mit
sudo systemctl stop keycloak
Ein paar Begriffe
Realm
Ein Realm ist ein Bereich für bestimmte Zielsysteme, so eine art Mandant. Im Realm legt man die Clients an. Pro Realm erhält man eine eigene Login-Maske.
Wenn ich einen Client in mehreren Realms anlege und ein User in diesen Realms einen Account hat, dann erscheint beim Anmelden die Auswahlmaske, die man von Google-/Facebook-Anmeldungen kennt.
Client
Zielsystem (z.B. hier Nextcloud), das an Keycloak angebunden werden soll. Wird oft als Anwendung bezeichnet, die sich authentifizieren möchte.
Role
Berechtigungen für User oder Gruppen. Was darf er auf dem Zielsystem und was nicht.
Gruppen
Eine Gruppe in Keycloak ist eine Sammlung von Benutzern, denen gemeinsame Rollen oder Berechtigungen zugewiesen werden können.
Identity Provider
Externe Quelle, gegen die sich Keycloak authentifizieren kann. LDAP oder andere Keycloaks,…
------ Nachmittag ----
Keycloak und Nextcloud miteinander verbinden
Nextcloud ist ein Dienst, der ähnlich wie Microsoft Office 365 diverse Programme anbietet. Hier wird es nur als ein Beispiel Zielsystem genutzt. In Nextcloud kann ich unter Administration Settings/OpenID Connect einen neuen Identity Provider registrieren, indem ich bei registered Providers auf das Plus klicke:

Um die Felder auszufüllen brauchen wir aber noch Informationen aus dem Keycloak. Deswegen öffnen wir parallel Keycloak/Clients/generate Clients und füllen die Felder wie folgt aus:


Root-URL:https.//www.example.test/nextcloud

Wir kopieren das Client-Secret:

Und kopieren ihn nach Client Secret vom Nextcloud:

Die Keycloak Realm Webseite steht in OpenID Endpoint Configuration. Diese finden wir in den Realm Settings ganz unten. Wir brauchen die URL davon um sie bei Nextcloud in das Fel "Discovery enpoint" einzutragen:

https://www.example.test/keycloak/realms/webapps/.well-known/openid-configuration
Nachdem wir die Settings gespeichert haben, sehen wir den ID Provider:

Nachdem die Verbindung zwischen Keycloak und Nextcloud hergestellt wurde, kann ich mich als einer der Keycloak-User (hier "Andiflocken") bei Nextcloud über die Option "Login with Keycloak" anmelden:

Wir haben uns erfolgreich als "Andi Flocken" angemeldet:

Was passiert da eigentlich im Hintergrund?
Wie oben schon gezeigt, gibt es eine Konfigurationsseite, in der mehrere URLs hinterlegt sind: https://www.example.test/keycloak/realms/webapps/.well-known/openid-configuration

Vier wichtige URLs. Die von den Clients oft gebraucht werden:
- Authorization Endpoint: Der Authorization Endpoint ist die URL, an die sich eine Anwendung wendet, um die Zustimmung des Nutzers zu erhalten und einen Autorisierungscode zu erhalten.
- Token Endpoint: Von wo muss er kommen, damit ergültig ist
- Introspection_Endpoint: Der Introspection Endpoint ist eine URL, über die Clients und Ressourcen-Server Informationen über einen Token abfragen können, zum Beispiel ob er gültig oder abgelaufen ist.
- End_session_endpoint: Dorthin werden wir hingeleitet, wenn wir uns ausloggen
Was passiert beim Login:
Wir klicken auf die Applikation. Die leitet uns weiter nach Keycloak. Keycloak erzeugt einen Eintrag in einer Session Tabelle.

Zusätzlich erhalte ich als User in meinem Browser einen Session Cookie.
Dann erstellt Keycloak einen authorisation Code und schickt ihn zu der Redirect URL.
Der Auth-Code wird an einem Keycloak Endpoint gegen einen Access und Refresh Token ausgetauscht.
Der Access Token wird im Reply an den Client mitgeliefert.
Den Refreshtoken behält der Browser im Hintergrund. Sobald der Access Token abgelaufen ist, wird mit dem Refreshtoken ein neuer Access Token angefordert.
Wie geht es weiter?
Wir sprechen heute noch darüber wie LDAP angebunden wird. Außerdem klären wir noch offene Fragen. Wer nichts verpassen will, folgt mir einfach auf einem dieser Kanäle: https://ecency.com/@achimmertens https://peakd.com/@achimmertens Wer wissen will, wie die Blockchain Hive funktioniert (ja, auch da gibt es Schlüssel) und wie man damit sich den ein oder anderen Kasten Bier kaufen kann, spricht mich einfach an.
Gruß, Achim Mertens