Keycloakschulung Mitschrift Teil 2/3

@achimmertens · 2025-10-29 06:45 · Deutsch D-A-CH

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:

image.png

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: image.png

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:

image.png

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:

image.png

image.png

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

image.png

Wir kopieren das Client-Secret:

image.png

Und kopieren ihn nach Client Secret vom Nextcloud:

image.png

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:

image.png

https://www.example.test/keycloak/realms/webapps/.well-known/openid-configuration

Nachdem wir die Settings gespeichert haben, sehen wir den ID Provider:

image.png

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:

image.png

Wir haben uns erfolgreich als "Andi Flocken" angemeldet:

image.png


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

image.png

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.

image.png

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

#keycloak #docu #deutsch #schulung #training #mitschrift #nextcloud #token
Payout: 0.000 HBD
Votes: 62
More interactions (upvote, reblog, reply) coming soon.