Keycloakschulung Mitschrift

Hallo zusammen,

ich besuche derzeit eine Schulung zum Thema Keycloak (Identity Provider) und möchte euch hier an meinen Erkenntnissen teilhaben lassen.
Unser Dozent ist Alexander Schichow aus Köln.
Ich habe mir ein paar stichwortartige Notizen gemacht. D.h. dies hier ist keine vollständige Doku, sondern meine etwas aufgearbeitete Schulungsmitschrift. Und natürlich ist es nur das, was ich verstanden habe - also keine Gewähr auf Richtigkeit. Wenn ihr Fehler seht, sagt mir bitte Bescheid.

Was ist Keycloak

Wörtlich übersetzt bedeutet Keycloak Schlüsselummantelung oder Schlüsselabdeckung.
Es implementiert Single Sign On (SSO), sorgt also dafür, dass man sich nur einmal am Tag anmeldet und alle anderen angeschlossenen Systeme das Login übernehmen.


Quelle

Keycloak kümmert dabei um folgendes Tripple A:

  • Authentication - Wer bin ich?
  • Authorisation - Was darf ich?
  • Accounting - Was tue ich?

Accounting: Aufzeichnung aller Aktionen eines Users, Verantwortlichmachen, Anmeldeereignisse ((nicht-)erfolgreiches Anmelden), Sicherheitsfeature

Claim: Key-Value Paar. Attributset das gebraucht wird zur Authentifizierung (z.B. Emailadresse, UID,…)

Ein Token besteht aus verschiedenen Claims. Claims werden zur Autorisierung verwendet, nicht nur zur Authentifizierung.

Die Loginformationen können auch an externe Tools wie Grafana oder ELK ausgelagert werden

Cookies sind im http Format, Token in Javascript Web Token (JWT) Format geschrieben.

https

Https ist http + TLS

TLS - Transport Layer Security: Es wickelt die http-Seiten in eine Sicherheits-Schicht ein.

Der Server schickt beim Handshake einen öffentlichen Schlüssel eines Zertifikats, sowie seinen FQDN (Fully Qualified Domain Name).
Der Browser überprüft das Zertifikat.
ECDHE - Verschlüsselungsverfahren - Sitzungsschlüssel wird vom Webserver und Browser ausgehandelt. Danach werden die Daten symmetrisch mit diesem Schlüssel verschlüsselt. Dauert alles weniger als 0.1 Sekunden.

TLS Zertifikat - Zentrale Beglaubigung.

PFS - Perfect Forward Secrecy, Sicherheitsfeatuer ab TLS 1.3. Es gibt nur noch temporäre Sitzungsschlüssel

MPLS - Hochsicherheits-Netzwerk von Providern

Hier kann man den Dialog zwischen einem Browser (hier ein CURL-Befehl) und einem https-Server sehen:

grafik.png

Cipher ist ein Verschlüsselungsalgorithmus, wie RSA, …

HSTS - verhindert downgradeangriffe

TLS ist Verschlüsselung auf Layer 4, im Gegensatz zu einem VPN, der auf der Applikationsebene unterwegs ist.

----- Nachmittag ----

SAML, OAUTH2 und OpenID Connect (OIDC)

Dies sind Protokolle, die zwischen dem Zielsystem und dem Identity Provider (wie Keycloak) verwendet werden können.
SAML und OAUTH2 sind schon älter, OpenID Connect ist jetzt (je nach Anwendungsfall) state of the art.
OpenID Connect (OIDC) erweitert OAuth2 um die Möglichkeit der Passwortweitergabe.

Anmelden mit Google oder Facebook

Wir kennen das, wenn wir ein neues Tool ausprobieren wollen und dieses sagt, du musst dich erst registrieren. Dabei wird uns oft angeboten, den Google-, Facebook-, Github-, ... Account zu verwenden. Im Hintergrund wird dann das OAuth2.1 Protokoll verwendet.
Wir werden dann bei Google angemeldet und der schickt einen Access-Token zurück.
Die jeweilige App darf nur auf das zugreifen, für was wir als Benutzer die Erlaubnis erteilt haben. Es werden dabei keine Anmeldedaten preisgegeben.

Oauth arbeitet mit 4 Rollen:

  • Resource Owner
  • Client (Zielsystem, auf das man zugreifen möchte)
  • Resource Server (z.B. Google)
  • Authorisation Server (Identity Provider)


Quelle

Die Anmeldung erfolgt in 5 Schritten:

grafik.png

Zuerst wird der Access Token (Gülitgkeitsdauer von 5-10 Minuten) übergeben.
Dann kommt der Refresh Token, der dazu dient, einen neuen Access Token zu erhalten.
Das 3. Token ist der ID-Token, der Informationen über den Benutzer enthält.

Das Format ist jeweils JWT (Json Web Token)

JWT

JWT besteht aus drei Teilen:

  • Header
  • Payload (mit den Claims)
  • Signature (Integrität muss gegeben sein)

JWT ist nicht verschlüsselt, aber signiert. Dadurch kann es nicht mehr verändert werden (Signatur würde gebrochen).

So sieht ein Beispiel JWT aus:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbmUgRG9lIiwiYWRtaW4iOnRydWV9. TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

Dieses kann man im Web unter https://jwt.io aufdröseln

grafik.png

Ein Scope (Ansammlung von Claims) definiert, welche Claims verwendet werden. Dieser Scope steht im Payload.

SAML

Das SAML Protokoll spricht im xml Format (Das ist komplexer und nicht so sicher wie JWT)
Es ist etwas veraltet, hat sich aber bewährt im Enterprise-Umfeld.

Implicit flow

Der Token wird über die URL mitgegeben. Ist aber nicht sicher. Keycloak benutzt Implicit Flow seit 2021 nicht mehr.

Praxis

Wir installieren einen Keycloak-Server. Das geht via Docker Container:
https://www.keycloak.org/getting-started/getting-started-docker

docker run -p 127.0.0.1:8080:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.4.2 start-dev

Beifang:
sudo !! <- führt den letzten Befehl als Admin aus.

Oder als direktes Setup:

wget https://github.com/keycloak/keycloak/releases/download/26.4.2/keycloak-26.4.2.zip
unzip keycloak-26.4.2.zip
cd keycloak-26.4.2/
bin/kc.sh start-dev

Sort:  

Oha, hab es mal überflogen. Ordentlicher Content! Ist das eine berufliche Fortbildung gewesen?

Hi @borsengelaber, ja. Wir haben derzeit eine dreitägige Schulung. Mir hilft es immer, das gelernte so zusammenzufassen, dass ich es nach einem Jahr noch verstehe. Ich hoffe für andere ist es auch bereichernd.

Ist definitiv ein Mehrwert!

I’ve heard about Keycloak before but never understood it this clearly. The explanation about SSO and token management made it easy to follow.