Durchstarten mit Keycloak und Docker

Foto des Autors
Hassan El Mailoudi

In diesem Beitrag erfahren Sie, wie Sie Keycloak mithilfe von Docker ausführen und konfigurieren können. Wir erläutern die Bedeutung von Umgebungsvariablen, diskutieren die Installation von Erweiterungen und zeigen nützliche Plug-ins auf.

Bildquelle: Araki Illustrations-stock.adobe.com

Stellen Sie sich vor, Sie haben eine Anwendung auf Ihrem Computer entwickelt und erfolgreich getestet. Nun würden Sie die Anwendung gerne Kolleg:innen zur Verfügung stellen, die diese auf ihren eigenen Rechnern ausführen möchten. Oftmals führt die Verwendung unterschiedlicher Betriebssysteme oder die Notwendigkeit manueller Bibliotheksinstallationen zu Kompatibilitätsproblemen. Um solche Schwierigkeiten zu umgehen, können Sie Ihre Anwendung zusammen mit den Abhängigkeiten in einen Container verpacken und diesen Container an Ihre Kolleg:innen weitergeben. Diese benötigen lediglich Docker auf ihren Rechnern, um die Anwendung erfolgreich auszuführen. 

Was ist Docker?

Docker ist eine Open-Source-Plattform zur Containerisierung von Anwendungen. Mithilfe von Docker können Entwickler:innen Anwendungen und deren Abhängigkeiten in isolierte Container verpacken. Dies ermöglicht es, eine Anwendung unabhängig von der Systemumgebung auf verschiedenen Rechnern auszuführen. So können Sie auch Keycloak in Ihre Umgebung integrieren.

Bevor wir fortfahren und Keycloak einrichten, stellen Sie sicher, dass Docker bereits auf Ihrem System installiert ist. Falls nicht, können Sie dies einfach hier nachholen. 

Anwendung im Browser aufrufen 

Zunächst müssen wir verstehen, wie Anwendungen auf einem Computer, der außerhalb von Containern läuft, im Webbrowser aufgerufen werden.

Nehmen wir an, Sie haben zwei Anwendungen auf Ihrem Computer gestartet. Um auf diese beiden Anwendungen zuzugreifen, muss jeder Anwendung eine eigene, eindeutige Portnummer zugewiesen werden. Dadurch können Sie auf die Anwendung „APP_1“ über http://localhost:8080 und auf „APP_2“ über http://localhost:8082 zugreifen. 

Wenn Sie nun Docker verwenden und jede Anwendung in einen separaten Container verpacken, sieht es auf Ihrem Computer folgendermaßen aus: 

Container können beliebige Portnummern verwenden. Jeder Container verfügt über eine interne und eine externe Portnummer. Jede Anwendung kann über die Adresse http://localhost: + externe Portnummer aufgerufen werden (zum Beispiel „APP_1“ unter http://localhost:8089). Keycloak verwendet den Port 8080 (im Dev-Modu) als internen Standard-Port. 

Keycloak mithilfe des Befehls ‚docker run‘ starten

In diesem Abschnitt werden wir Ihnen zeigen, wie Sie Keycloak mithilfe des Docker-Befehls ‚docker run‘ starten können:

docker run --name keycloak_server -p 8089:8080 \
		-e KEYCLOAK_ADMIN=admin \
		-e KEYCLOAK_ADMIN_PASSWORD=password \
		quay.io/keycloak/keycloak:22.0.5 \
		start-dev Code-Sprache: Bash (bash)

(Eine Erläuterung der Befehle aus dem Bild finden Sie im Verlauf dieses Abschnitts.)

Mit dem oben genannten Befehl ‚docker run‘ können Sie Keycloak erfolgreich auf Ihrem Computer starten. Sobald die folgenden Zeilen im Terminal erscheinen, war der Start erfolgreich:

Die Verwendung des Parameters „-p 8980:8080“ ermöglicht den Zugriff auf die Keycloak-Admin-Konsole im Webbrowser über die externe Portnummer. Das Format dieses Parameters lautet „externe Portnummer:interne Portnummer“. Das bedeutet, dass Sie die Admin-Konsole unter http://localhost:8980 aufrufen können. 

Weitere Befehle und ihre Funktionen

-e: Dieser Befehl ermöglicht es, Umgebungsvariablen zu definieren. 

KEYCLOAK_ADMIN: Das ist der Benutzer:innenname für Keycloak-Admin Account. 

KEYCLOAK_ADMIN_PASSWORD: Dies ist das Passwort für Keycloak-Admin Account. 

quay.io/keycloak/keycloak:22.0.5: Dies ist das Keycloak-Image. 

start-dev: Dieser Befehl wird verwendet, um Keycloak im Entwicklungsmodus zu starten. Mehr Informationen finden Sie hier.

Der ‚docker run‘ Befehl ist super um etwas mal schnell auszuprobieren. Falls man etwas wiederholbares haben will, sollte man zu ‚docker-compose‘ greifen.

Keycloak mit Hilfe von Docker-Compose starten:

Erstellen Sie eine Datei mit dem Namen: docker-compose.yml: 

version: '3'
services:
  keycloak:
    image: quay.io/keycloak/keycloak:22.0.5
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: password
    command: ['start-dev']
    ports:
      - "8089:8080" # Externe-Portnummer:Interne-PortnummerCode-Sprache: YAML (yaml)

Dann führen Sie den folgenden Befehl aus, um den Keycloak-Container hochzufahren: 

docker-compose upCode-Sprache: Bash (bash)

Die letzte Log-Zeile weist darauf hin, dass der Container bereit ist:

Dadurch können Sie die Admin-Konsole unter http://localhost:8089 aufrufen:

Vorteile: Keycloak und Datenbank in Docker Compose integrieren

Das Einbinden einer Datenbank in Docker Compose bietet mehrere Vorteile: 

  1. KeycloakNeustart: Docker Compose erleichtert das Verwalten und Neustarten von Containern. Wenn Sie Keycloak und die Datenbank in Docker Compose einbinden, können Sie beides separat neu starten, ohne die gesamte Umgebung zu beeinträchtigen. Dies ist besonders hilfreich, wenn Aktualisierungen oder Konfigurationsänderungen erforderlich sind. 
  1. Testing: Docker Compose ermöglicht die einfache Erstellung von Umgebungen für Entwicklung und Tests. Durch das Einbinden der Datenbank in Docker Compose können Sie leicht wiederholbare und isolierte Testumgebungen erstellen. Dies erleichtert das Testen von Anwendungen, da Sie sicherstellen können, dass Ihre Anwendung in einer konsistenten Umgebung funktioniert. 
  1. Datenpersistenz: Docker-Container sind normalerweise ephemeral. Das bedeutet, dass sie bei Beendigung ihre Daten verlieren. Wenn Sie die Datenbank in Docker Compose einbinden, können Sie jedoch Volumes oder persistente Speicheroptionen verwenden, um sicherzustellen, dass die Daten in der Datenbank erhalten bleiben, wenngleich der Container neu gestartet oder erstellt wird.  

So funktioniert es: Keycloak und Datenbank in Docker-Compose-Datei integrieren

Im Folgenden zeigen wir Ihnen, wie Sie Keycloak und eine Datenbank in eine Docker-Compose-Datei integrieren können. Eine Erläuterung der Befehle aus dem Bild finden Sie im Verlauf dieses Abschnitts.

version: '3'  
services:
  Keycloak:
    image: quay.io/keycloak/keycloak:22.0.5
    command: ['start-dev]
    environment:
      KC_DB: postgres
      KC_DB_URL_DATABASE: keycloak
      KC_DB_SCHEMA: public
      KC_DB_URL: jdbc:postgresql://postgres/keycloak

      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: password      

      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: password
      
      KC_HTTP_RELATIVE_PATH: /auth
    ports:
      - "8089:8080" # Externe-Portnummer:Interne-Portnummer
  
  postgres:
    image: postgres
    container_name: postgres
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: passwordCode-Sprache: YAML (yaml)

Erläuterung der Befehle

KC_DB: Gibt den Typ der verwendeten Datenbank an. In diesem Fall wird PostgreSQL als Datenbank verwendet. 

KC_DB_URL_DATABASE: Dies ist der Name der Datenbank, die von Keycloak verwendet wird. In diesem Fall ist es „keycloak“. 

KC_DB_USERNAME: Dies ist der Benutzer:innenname, mit dem Keycloak auf die Datenbank zugreifen wird. In diesem Fall ist es „keycloak“. 

KC_DB_PASSWORD: Dies ist das Passwort für den Datenbankbenutzer „keycloak“. 

KC_DB_SCHEMA: Dies ist das Datenbankschema, das von Keycloak verwendet wird. In diesem Fall ist es „public“. 

KC_DB_URL: Dies ist die JDBC-URL (Java Database Connectivity), die angibt, wie Keycloak auf die PostgreSQL-Datenbank zugreifen kann. Die URL lautet „jdbc:postgresql://postgres/keycloak“. ‚postgres‘ ist in diesem Fall der Name des Postgressql Containers. Innerhalb desselben Docker Netzwerks, kann der Container über den container_name angesprochen werden.

KC_HTTP_RELATIVE_PATH: gibt an, dass die Keycloak-URL einen relativen Pfad /auth haben soll. In älteren Versionen von Keycloak war die URL direkt auf den Pfad /auth ausgerichtet, zum Beispiel http://localhost:8080/auth. Ab Version X nahm Keycloak allerdings eine Änderung vor, bei der der Pfad /auth aus der URL entfernt wurde. Die neue Standard-URL für Keycloak ab Version X ist http://localhost:8080/

POSTGRES_DB, POSTGRES_USER und POSTGRES_PASSWORD sind Umgebungsvariablen für den PostgreSQL-Container. Sie legen den Namen der Datenbank, den Benutzer:innennamen und das Passwort für den Datenbankzugriff fest. 

Keycloak-Extensions installieren – Warum?

Erweiterungen in Keycloak sind zusätzliche Module oder Plug-ins, die in das Kernsystem integriert werden können. Sie erweitern die Funktionalität und die Fähigkeiten der Plattform. Ferner ermöglichen sie es Entwickler:innen und Administrator:innen, maßgeschneiderte Lösungen zu erstellen, die den spezifischen Anforderungen ihres Projekts entsprechen. Diese Erweiterungen können unter anderem in Form von Authenticator-Plug-ins, Themes oder Identity-Provider-Implementierungen vorliegen. 

Extensions in Keycloak können verschiedene Aufgaben erfüllen: 

  1. Authentifizierung und Autorisierung: Authenticator-Plug-ins ermöglichen es, Benutzer:innen definierte Authentifizierungsmethoden zu implementieren. Autorisierungs-Plug-ins machen es möglich, die Zugriffskontrolle und Berechtigungen fein abzustimmen. 
  1. Gestaltung des Nutzungserlebnisses: Durch die Anpassung von Themes können Sie das Erscheinungsbild und die Nutzungserfahrung von Keycloak an Ihr Branding und Ihre Designrichtlinien anpassen. 
  1. Integration von Drittanbietern: Identity-Provider-Implementierungen erlauben die Keycloak-Integration von anderen Identitätsanbietern und Diensten. Das ermöglicht Single-Sign-On (SSO). 

Daseinsberechtigung von Extensions

Erweiterungen sind in Keycloak von entscheidender Bedeutung, da sie die Flexibilität und Anpassungsfähigkeit der Plattform erheblich erweitern. Im Folgenden erklären wir kurz, warum Erweiterungen von Bedeutung sind: 

  1. Individualisierung: Organisationen haben unterschiedliche Anforderungen und Designrichtlinien. Erweiterungen ermöglichen es, Keycloak an diese spezifischen Anforderungen anzupassen und ein einheitliches Nutzungserlebnis zu gewährleisten. 
  2. Integration: Durch die Möglichkeit, Drittanbieter zu integrieren, können Organisationen nahtlos mit externen Diensten und Identitätsanbietern zusammenarbeiten. 
  3. Sicherheit und Authentifizierung: Erweiterungen bieten zusätzliche Sicherheitsoptionen und Authentifizierungsmethoden, die den unterschiedlichen Sicherheitsanforderungen gerecht werden. 

Um eine Erweiterung in Keycloak einzubinden, können Sie ein Volume einbinden. Kopieren Sie dazu die JAR-Datei der Erweiterung in das entsprechende Verzeichnis von Keycloak. Fügen Sie dem zuvor definierten Keycloak-Container die folgenden Zeilen in der Docker-Compose-Datei (siehe oben) hinzu: 

volumes: 
  - ./target/myExtension.jar:/opt/keycloak/providers/myExtension.jar Code-Sprache: Bash (bash)

Beispiele für Keycloak-Extensions: 

Keycloak-home-idp-discovery

Dieses Plug-in ermöglicht es Benutzer:innen, sich bei Keycloak anzumelden, ohne einen Identitätsanbieter auswählen zu müssen. Normalerweise müssen Benutzer:innen einen Identitätsanbieter auswählen, bevor sie sich anmelden können. Mit diesem Plug-in entfällt der Schritt – und die Anmeldung erfolgt schneller. 

Hier stellt unser Keycloak-Experte Sven-Torben Janus Funktionen und Vorteile dieser Erweiterung vor (Videosprache Englisch).

Restrict Client Auth Extension

Dies ist ein Keycloak-Authentifizierungsanbieter, um die Nutzungsberechtigung für Clients einzuschränken. 

Zusammenfassung

Mit diesem Leitfaden haben Sie nun einen umfassenden Einblick in die Welt von Keycloak und Docker erhalten. Sie haben gelernt, wie Sie Keycloak mithilfe von Docker ausführen und konfigurieren können. 

Wir haben die Bedeutung von Umgebungsvariablen erläutert, insbesondere solcher, die für die Konfiguration von Keycloak und der Datenbank benötigt werden. Überdies haben wir die Installation von Erweiterungen diskutiert und Verweise auf nützliche Plug-ins gegeben. 

Ganz gleich, ob Sie Keycloak in einer Entwicklungs-, Test- oder Produktionsumgebung verwenden: Diese Grundlagen werden Ihnen dabei helfen, Ihre Authentifizierungs- und Autorisierungslösungen effizienter und flexibler zu gestalten. 

Sie haben weitere Fragen? Wir beantworten sie gerne.

Egal, ob Sie Keycloak zum ersten Mal einsetzen oder Ihre gesamte Identity- und Access-Management-Landschaft optimieren möchten – wir unterstützen Sie gerne, diese einfacher, nahtloser und robuster zu gestalten. Lesen Sie hier, wie Sie Ihr Identitäts-Management effizienter gestalten können.

Gerne können wir ihre Fragen in einem persönlichen Gespräch klären und erste Tipps geben. 
Buchen Sie einfach über den folgenden Calendly-Link einen kostenlosen halbstündigen Gesprächs-Slot:

Das könnte Dich auch noch interessieren

Performante Authentifizierung mit Keycloak

Performante Authentifizierung mit Keycloak

Ich werde anhand eines konkreten Testszenarios zeigen, wie man die Performance einer verteilten Anwendung durch föderative Authentifizierung mit Keycloak massiv ...
Coding Dojos in the time of Corona

Coding Dojos in the time of Corona

The Corona pandemic creates new problems, especially for events. As the organizer of the Conciso Coding Dojo Dortmund I tried ...
Titelbild zum Beitrag "Behavior Driven Development und seine Umsetzung mit Cucumber"

Behavior Driven Development und seine Umsetzung mit Cucumber

Tauchen wir gemeinsam in die Welt des Behavior Driven Development ein. Lass uns entdecken, wie diese Methode die Art und ...