Keycloak 26 — Ops & Hardening Report
Sicherer Produktivbetrieb von Keycloak 26.x: Architektur, Härtungs-Best-Practices und eine eigene Sektion für bekannte Hindernisse & Probleme. Stand: 26.7.2.
Die drei Hebel für sicheren Betrieb
Keycloak 26 ist die aktuelle Major-Linie des Open-Source-Identity-Providers (CNCF-Inkubation). Für den Betrieb entscheiden drei Dinge: eine saubere Reverse-Proxy-/TLS-Schicht, die strikte Trennung von Main- und Management-Port sowie disziplinierte Token-/Session-Härtung (DPoP, FAPI 2, Passkeys).
Die 26.x-Linie liefert kontinuierlich Sicherheitsverbesserungen — aber eben auch eine auffällig lange Reihe von Breaking Changes in Patch-Releases (26.6.x, 26.7.x). Ein Upgrade ohne den Upgrading-Guide ist daher riskant. Die folgende Kennzahl-Übersicht fasst den Betriebs-Fokus zusammen.
Was ist Keycloak 26?
Keycloak ist der zentrale Identity- & Access-Management-Baustein: SSO, Identity Brokering, User Federation (LDAP/AD), OAuth 2.0, OIDC und SAML. Die Linie 26 begann mit 26.0 und steht aktuell auf 26.7.2. Der Server-Container läuft standardmäßig auf OpenJDK 21; Java 25 wird ab 26.6 unterstützt (der Container bleibt aus FIPS-Gründen bei 21).
Die sicherheitsrelevanten Meilensteine der Linie: Passkeys, FAPI 2 Final und DPoP wurden in 26.4 „supported“; Zero-Downtime Patch Releases und der JWT Authorization Grant (RFC 7523) in 26.6; Multi-Cluster v2 (HA ohne externes Infinispan) und SCIM kamen in 26.7 als Preview hinzu. Parallel dazu werden schwache Defaults aktiv abgebaut — AES-Schlüssel steigen auf 256 Bit, Session-Cookies wechseln auf SHA-384, SHA-1 wird in 27 entfernt.
Architektur & Betrieb
Der Härtungs-Chokepoint ist der Reverse Proxy: er terminiert TLS und reicht Zertifikats-Informationen korrekt weiter. Dahinter läuft Keycloak auf dem Main-Port (8080); Health-/Metrik-Endpunkte liegen auf dem getrennten Management-Port (9000), der nicht über den Proxy exponiert werden darf. Persistenz kommt aus PostgreSQL, Caches aus eingebettetem Infinispan, externe Identitäten aus LDAP/AD oder föderierten IdPs.
Betriebs-Leitplanken
- Reverse Proxy ist Pflicht: TLS-Terminierung, Zertifikats-Weiterleitung und Absicherung der Admin-/Token-Endpunkte gehören an den Proxy.
- Ports trennen: Main-Port (App-Verkehr) und Management-Port (Health/Metrics) niemals über denselben öffentlichen Pfad.
- Datenbank-Encoding prüfen: Keycloak verifiziert beim Start UTF-8 und warnt bei Abweichung.
- Graceful Shutdown (seit 26.6) erlaubt Rolling Updates ohne Login-Fehler; Standard-Delay/Timeout je 1 s, ab 26.7 10 s Shutdown-Timeout.
Multi-Cluster v2 statt externem Infinispan
Das klassische Multi-Site-Setup benötigt einen externen Infinispan-Cluster plus vendor-spezifisches Fencing — erhebliche Betriebskomplexität. Multi-Cluster v2 (26.7, Preview) entfernt diese Abhängigkeit: Die Knoten verbinden sich direkt über eingebettete Caches, die synchron replizierte Datenbank ist die Single Source of Truth, und die Cache-Invalidierung läuft über einen DB-gestützten Outbox. Für Rolling Updates gilt weiterhin: immer ein Knoten nach dem anderen.
Auth- & Token-Flows: PKCE + DPoP
Für Browser-Apps ist der Authorization Code Flow mit PKCE der Standard. DPoP (seit 26.4 supported) macht Tokens sender-constrained: Jeder Token-/API-Aufruf trägt einen kryptografischen Proof, sodass ein gestohlenes Token ohne den privaten Schlüssel wertlos ist. Für Hochsicherheits-Clients erzwingt FAPI 2 zusätzlich HTTPS-Endpunkte und DPoP-gebundene Tokens.
Beachte: Lightweight Access Tokens sind für die Introspection gedacht — der UserInfo-Endpunkt lehnt sie seit 26.6.2 ab. Die Token-Introspection prüft seit 26.6.2 zudem, dass der aufrufende Client im aud-Claim steht.
Best Practices im Überblick
Die folgende Checkliste trennt MUST (nicht verhandelbar) von SHOULD (situativ). Jeder Punkt ist gegen die Keycloak-26-Dokumentation und die 26.4–26.7 Release-/Upgrading-Notes gehalten.
-
H1MUSTTLS endet am Proxy, nicht an Keycloak. Zertifikats-Weiterleitung korrekt konfigurieren; der Reverse Proxy ist die erste Verteidigungslinie und wird für alle Host-Header/Forwarding-Fragen maßgeblich.
-
H2MUSTManagement-Port getrennt halten. Health-/Metrik-Endpunkte (
9000) niemals öffentlich exponieren; am Proxy den Zugriff auf/healthexplizit blocken. -
H3MUSTRedirect-URIs exakt, ohne Wildcards. Seit 26.6.3 greifen Hostname-Wildcards (
https://example.com*) nicht mehr wie früher — OAuth-BCP und OAuth 2.1 verlangen ohnehin exakten String-Abgleich. -
H4MUSTTokens sender-constrainen. DPoP für öffentliche Clients aktivieren, um Token-Diebstahl zu entschärfen; Refresh-Tokens von Public Clients zwingend DPoP-binden.
-
H5MUSTFAPI 2 für Hochsicherheits-Clients. Für Finanz-/regulierte Kontexte die Client-Profile
fapi-2-*erzwingen; DPoP-Variante für sender-constrained. -
H6MUSTPasskeys / WebAuthn statt Passwörtern. WebAuthn-Policy mit Discoverable Credential (required/preferred/discouraged) statt des deprecated Yes/No-Schalters.
-
H7SHOULDKeine statischen Client-Secrets. Vault-SPI für Secrets nutzen; für Services Federated Client Auth (SPIFFE/K8s-Service-Account-Tokens) oder JWT Authorization Grant (RFC 7523) statt gehorteter Secrets.
-
H8SHOULDObservability aktivieren. OpenTelemetry (Traces, Logs, Metriken), MDC-Logging und dedizierte HTTP-Access-Logs ohne Token-Leakage für Audit-/Compliance.
-
H9SHOULDSecrets literal injizieren. Bei Passwörtern/Secrets mit
$-Zeichen dasKCRAW_-Prefix nutzen, damit Werte nicht als Ausdrücke evaluiert werden. -
H10SHOULDDB & Keys pflegen. Backups, UTF-8-Encoding, PostgreSQL Async-Commit (26.7) bewusst steuern; Realm-Keys auf AES-256 migrieren, bevor Sessions mit alten 128-Bit-Keys ablaufen.
Hindernisse & bekannte Probleme
Der größte Stolperstein der 26.x-Linie ist nicht ein einzelner Bug, sondern die Dichte an Breaking Changes in Patch-Releases. Wer 26.6.0 → 26.7.2 blind aktualisiert, trifft auf geänderte Introspection-, UserInfo-, Redirect- und mTLS-Semantik. Die Matrix unten priorisiert nach Betriebs-Risiko.
| Problem | Seit | Risiko | Mitigation |
|---|---|---|---|
Introspection prüft aud-Claim | 26.6.2 | hoch | Introspizierenden Client per Audience-Mapper ins aud aufnehmen oder Kompatibilitäts-Flag (deprecated) bis zur Korrektur. |
| UserInfo lehnt Lightweight Access Tokens ab | 26.6.2 | hoch | Introspection statt UserInfo, oder Token Exchange zu vollem Token. |
| Hostname-Wildcards in Redirect-URIs entfallen | 26.6.3 | hoch | Redirect-URIs exakt pflegen; https://* bleibt erlaubt, alles andere wird wie /* behandelt. |
| X509-Client-Auth verlangt CA Subject DN | 26.7.0 | mittel | CA-Subject-DN setzen; bei TLS-terminierendem Proxy Trust-/mTLS-Store korrekt konfigurieren. |
| Outgoing HTTP folgt Redirects nicht mehr | 26.6.1 | mittel | Broker-/IdP-Endpunkte prüfen; Flag --spi-connections-http-client--default--allow-redirects nur übergangsweise. |
JS-Policies brauchen scripts-Feature | 26.6.0 | mittel | --features=scripts explizit aktivieren, falls JS-Policies genutzt werden. |
view-system-Admin-Rolle entfernt | 26.7.0 | mittel | Auf Master-Realm-User mit manage-realm umstellen; vor Upgrade Zugriffe prüfen. |
| IdP-Alias unveränderlich | 26.7.0 | niedrig | Alias nur noch bei Anlage setzen; REST-Alias-Updates liefern 400. |
| DPoP nicht für implicit/hybrid | 26.7.0 | niedrig | Nur Authorization-Code-Flow verwenden; implicit/hybrid sind ohnehin deprecated. |
| SHA-1 wird entfernt | 27 (angekündigt) | niedrig | Bereits jetzt auf SHA-2/SHA-3 umstellen. |
Sicherheits-Trajektorie der 26.x-Linie
- 26.4.0Passkeys, FAPI 2 Final und DPoP werden „supported“ — der größte Token-Sicherheits-Schub der Linie.
- 26.4.6LDAP-Referrals werden standardmäßig gefiltert (Best-Practice-Härtung).
- 26.5.0OpenTelemetry Logs/Metriken, MDC-Logging supported; Outgoing-HTTP-Retry bleibt standardmäßig aus.
- 26.6.0Federated Client Auth und JWT Authorization Grant supported; Zero-Downtime Patch Releases werden Standard.
- 26.7.0Multi-Cluster v2 und SCIM als Preview; AES-256-/SHA-384-Defaults; mehrere Breaking Changes.
- 26.7.2Aktueller Patch-Stand; Legacy-Account-Linking-Endpoint standardmäßig deaktiviert.
Migration 25 → 26 Kurz-Checkliste
- M1SCHRITTVor jedem Minor/Patch-Update den Upgrading-Guide lesen — die 26.x-Linie führt Breaking Changes auch in Patches ein.
- M2SCHRITTRedirect-URIs, Introspection-Clients (aud), UserInfo-Nutzung und JS-Policies gegen die Breaking-Change-Matrix prüfen.
- M3SCHRITTClustered-Updates strikt ein Knoten nach dem anderen; Zero-Downtime Patch Releases nur innerhalb desselben Minor-Streams.
- M4SCHRITTNach dem Upgrade Realm-Keys auf AES-256 nachziehen und abgelaufene Sessions mit alten Keys auslaufen lassen.
PostgreSQL Async-Commit (26.7) — was zu beachten ist
--spi-connections-jpa--quarkus--async-commit=false.Quellen
Alle Aussagen sind gegen die offizielle Keycloak-Dokumentation (Stand 26.7.2) geprüft.