meldestelle/docs/01_Architecture/adr/0006-authentication-authorization-keycloak-de.md
Stefan Mogeritsch 09b0b1a462 infra: clean up Keycloak configuration, enforce consistency in .env, and improve health checks
Streamlined Keycloak configurations with defaults for development and production in `.env`. Added health checks and improved environment variable documentation with comments to differentiate local and server deployments. Ensured compatibility with pre-built registry images.
2026-03-06 11:23:24 +01:00

4.5 KiB

type status owner
ADR ACTIVE Lead Architect

ADR-0006: Authentifizierung und Autorisierung mit Keycloak

Status

Akzeptiert

Kontext

Als Teil unserer Microservices-Architektur (ADR-0003) benötigten wir eine robuste und zentralisierte Lösung für Authentifizierung und Autorisierung. Zu den wichtigsten Anforderungen gehörten:

  1. Single Sign-On (SSO) über alle Dienste und Anwendungen hinweg
  2. Unterstützung für mehrere Authentifizierungsmethoden (Benutzername/Passwort, OAuth, SAML)
  3. Feingranulare Autorisierung mit rollenbasierter Zugriffssteuerung (RBAC)
  4. Benutzerverwaltungsfunktionen einschließlich Selbstregistrierung und Profilmanagement
  5. Integration mit externen Identitätsanbietern
  6. Sicherheits-Best-Practices einschließlich Passwortrichtlinien und Kontosperrung
  7. Tokenbasierte Authentifizierung für die Kommunikation zwischen Diensten

Die Implementierung dieser Funktionen von Grund auf wäre zeitaufwändig und fehleranfällig und würde Ressourcen von unserer Kerngeschäftsfunktionalität abziehen.

Entscheidung

Wir haben uns entschieden, Keycloak (Version 26.4.2) als unsere Identitäts- und Zugriffsverwaltungslösung zu verwenden. Keycloak ist eine Open-Source-Identitäts- und Zugriffsverwaltungslösung, die Folgendes bietet:

  1. Benutzerauthentifizierung: Mehrere Authentifizierungsmethoden und -abläufe
  2. Benutzerföderation: Integration mit LDAP, Active Directory und anderen Benutzerspeichern
  3. Identitätsvermittlung: Integration mit externen Identitätsanbietern (Google, Facebook usw.)
  4. Single Sign-On: Über alle Anwendungen und Dienste hinweg
  5. Feingranulare Autorisierung: Rollen- und attributbasierte Zugriffssteuerung
  6. Benutzerverwaltung: Selbstregistrierung, Profilmanagement, Passwortrichtlinien
  7. Tokenbasierte Authentifizierung: JWT-Tokens für die Kommunikation zwischen Diensten

Unsere Implementierung umfasst:

  • Keycloak-Server, der als containerised Dienst bereitgestellt wird
  • Integration mit unserem API-Gateway für die Token-Validierung
  • Client-Adapter für unsere Dienste und Anwendungen
  • Benutzerdefinierte Themes und E-Mail-Vorlagen
  • Rollen- und Gruppendefinitionen, die auf unser Domänenmodell abgestimmt sind

Konsequenzen

Positive

  • Umfassende Lösung: Keycloak bietet eine vollständige Identitäts- und Zugriffsverwaltungslösung
  • Standards-Konformität: Keycloak implementiert Industriestandards (OAuth 2.0, OpenID Connect, SAML)
  • Reduzierter Entwicklungsaufwand: Wir müssen Authentifizierung und Autorisierung nicht von Grund auf implementieren
  • Sicherheit: Keycloak folgt Sicherheits-Best-Practices und wird aktiv gewartet
  • Flexibilität: Keycloak unterstützt mehrere Authentifizierungsmethoden und Identitätsanbieter

Negative

  • Betriebliche Komplexität: Keycloak fügt einen weiteren Dienst hinzu, der bereitgestellt und gewartet werden muss
  • Lernkurve: Teams müssen Keycloak-Konzepte und APIs erlernen
  • Leistungsüberlegungen: Die Token-Validierung fügt den Anfragen einen gewissen Overhead hinzu
  • Abhängigkeit: Wir sind für Authentifizierung und Autorisierung von Keycloak abhängig

Neutral

  • Konfigurationsbedarf: Keycloak erfordert sorgfältige Konfiguration, um mit unseren Sicherheitsanforderungen übereinzustimmen
  • Upgrade-Management: Keycloak-Upgrades müssen sorgfältig verwaltet werden

Betrachtete Alternativen

Eigener Authentifizierungsdienst

Wir haben in Betracht gezogen, unseren eigenen Authentifizierungsdienst zu entwickeln. Dies hätte uns vollständige Kontrolle über die Implementierung gegeben, hätte aber erheblichen Entwicklungsaufwand und laufende Wartung erfordert.

Auth0

Wir haben die Verwendung von Auth0, einer kommerziellen Identity-as-a-Service (IDaaS)-Lösung, in Betracht gezogen. Auth0 hätte ähnliche Funktionen wie Keycloak mit weniger betrieblichem Overhead geboten, hätte aber laufende Kosten und potenzielle Anbieterabhängigkeit mit sich gebracht.

Spring Security mit JWT

Wir haben die Verwendung von Spring Security mit JWT-Tokens für Authentifizierung und Autorisierung in Betracht gezogen. Dies hätte sich gut in unsere Spring-basierten Dienste integriert, hätte aber mehr Entwicklungsaufwand erfordert und hätte nicht die umfassenden Identitätsverwaltungsfunktionen von Keycloak geboten.

Referenzen