Setup von Keycloak für NUI in Docker

Funktionalität

Alle neuen Applikationen werden über Keycloak abgesichert. Außerdem bietet Keycloak Nutzer- & Rollenverwaltung.

Architektur

Alle neuen Applikationen werden über Keycloak abgesichert. Damit benötigen alle neuen & teilweise auch alten Applikationen Zugriff zu Keycloak.

Keycloak benötigt eine eigene Datenbank.

Für eine möglichst einfache Umstellung empfehlen wir zunächst einen Parallelbetrieb in folgender Form:

  • die bisherigen B2B (FSS) Knoten werden nicht modifiziert und kommunizieren nicht mit Keycloak. Sie dienen nur noch backendseitiger Nachrichtenverarbeitung ohne UI.
  • für die NUI werden ein neuer B2B (FSS) Knoten installiert. Dieser wird auf Keycloak umgestellt. Die Applikationen der NUI kommunizieren ausschließlich mit diesem Knoten.

Es ist möglich, bestehende User aus der B2B nach Keycloak zu migrieren, oder alternativ ein bestehendes LDAP direkt an Keycloak anzubinden.

Voraussetzungen

Installation

docker-compose Umgebung

Das Setup der hier beschriebenen Umgebung basiert auf einem docker-compose file. Diese Konfiguration definiert einen Container.

Die docker-compose Umgebung besteht letztlich aus einer Verzeichnisstruktur, die die einzelnen im Folgenden beschriebenen Dateien enthält. Die Verzeichnisstruktur stellt sich wie folgt dar:

| base/
  |- keycloak/
  |  |- data/
  |- docker-compose.yml
  |- .env

Diese Dokumentation basiert auf der folgenden docker-compose.yml:

version: '3.7'
services:
  # Container-Definition für die keycloak-Instanz
  keycloak:
    image: ${NEXUS}/keycloak:2020-11-10
    restart: always
    hostname: keycloak
    ports:
      # Port unter dem der keycloak (auch von außen) erreichbar ist
      - ${KEYCLOAK_PORT}:8080
    environment:
      # Admin-Zugang für den keycloak
      - KEYCLOAK_USER=admin
      - KEYCLOAK_PASSWORD=admin
    volumes:
      # mount point für die keycloak DB
      - ./keycloak/data/:/opt/jboss/keycloak/standalone/data

Achten Sie beim image darauf, eine aktuelle Version gemäß unserer Kompatibilitätsübersicht anzugeben.

Die oben aufgeführte docker-compose.yml beinhaltet verschiedene Variablen “${Variable}”. Diese Variablen dienen der Auslagerung von speziellen Bedingungen. Diese Variablen sind in der Datei .env enthalten und werden während des Starts der Container via docker-compose angewendet. Für die oben aufgeführte docker-compose.yml sieht die .env wie folgt aus:

KEYCLOAK_PORT=8080
NEXUS=docker-nob-erf.next-level-apps.com

Keycloak Datenbank

Das obige Beispiel arbeitet mit einer integrierten H2-Datenbank. Diese speichert ihre Daten im Ordner data, vgl. Sie das entsprechende volume.

Wenn Sie stattdessen eine produktive Datenbank angeben möchten, können Sie die Datenbank-Zugangsdaten über Umgebungsvariablen in der docker-compose.yml konfigurieren. Für weitere Details vgl. Sie die Keycloak Image Doku. Bsp:

    environment:
      - DB_VENDOR=postgres
      - DB_ADDR=host.docker.internal
      - DB_DATABASE=keycloak
      - DB_USER=postgres
      - DB_PASSWORD=postgres

Des Weiteren muss dann der benötigte JDBC Treiber gemountet werden z.B so:

    volumes:
      - /opt/b2b/keycloak/ojdbc.jar:/opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver/ojdbc.jar

Falls Sie noch weitere Informationen nachlesen möchten, finden Sie hier eine detaillierte Beschreibung.

Keycloak-Konfiguration (Schnellstart)

Befolgen Sie die nachstehenden Schritte für den Schnellstart der Keycloak-Konfiguration:

Schritt 1: Laden Sie hier die Keycloak-Konfigurations-JSON-Datei herunter

Schritt 2: Importieren Sie die Keycloak-Konfigurations-JSON-Datei.

keycloak_quick-start

Schritt 3: Sie haben die Keycloak-Konfiguration erfolgreich eingerichtet.

HTTPS

Die Keycloak Authentifizierung erfolgt über OAuth2. Dieses Verfahren ist unbedingt über HTTPS abzusichern. Deshalb empfehlen wir, Keycloak & alle Applikationen der neuen UI mit HTTPS zu betreiben.

Start des Docker-Containers

Mit dem folgenden Kommando kann der benötigte Container im Docker gestartet werden:

:opt/docker/b2b/> docker-compose up -d

Mit folgendem Kommando kann der benötigte Container im Docker gestoppt werden:

:opt/docker/b2b/> docker-compose stop

Konfiguration in der Keycloak-Admin-Oberfläche

Konfiguration/Einrichtung des keycloak

Nachdem die Container im Docker gestartet wurden, muss nun noch der keycloak konfiguriert werden. Hier sind die folgenden Bereiche einzurichten:

  • Realm
  • Clients
  • Roles
  • Users

Diese Schritte werden im Folgenden zusammengefasst. Es sei hier auch auf die vollständige Keycloak-Konfiguration-Doku verwiesen.

Realm

Um die Kommunikation zwischen der New-UI und der B2B in Docker abzusichern, muss im keycloak zunächst ein Realm definiert werden. Hierzu ist der keycloak im Browser unter der URL “http://[keycloak-host]:8080” aufzurufen:

Startseite der Keycloak-Docker-Instanz

Nach einem Klick auf “Administration Console” kann man sich mit “admin/admin” anmelden und über “Add realm” den Realm “B2B” anlegen:

keycloak_add-realm

Der Realm “B2B” kennzeichnet den gesamten Applikationskontext. Dem Realm kann nun noch ein Name zugewiesen werden. Dieser Name (“Display name” bzw. “HTML Display name”) wird im Login-Formular angezeigt:

Anpassen des Realm B2B

Folgende Werte können vergeben werden (frei anpassbar):

Feld Wert
Display name B2B by Practice
HTML Display name <h1 style="color:red;font-weight:bold;">B2B by Practice</h1>

Clients

Innerhalb des neuen Realms “B2B” müssen jetzt die Applikationen angelegt werden, die sich innerhalb des Applikationskontextes authentifizieren dürfen. Diese s.g. Clients können unter der entsprechenden Menüfunktion erstellt werden:

Öffnen des Formulars zum Erstellen eines neuen Clients

Die Clients der jeweiligen Microservices & Frontends werden auf ihren jeweiligen Dokumentationsseiten beschrieben.

Die ClientId kann von Ihnen selbst gewählt werden, wir sprechen aber meist eine Empfehlung aus.

Die RootURL ist bei Frontends immer die Adresse des DockerHost-Servers samt Port. Bei Backends kann oft auch alternativ die interne Dockeradresse angegeben werden.

Das Client Protocol bleibt auf openid-connect gestellt.

Üblicherweise ist immer der Standardflow zu nutzen (standardmäßig aktiv).

Frontends wählen als Access Type public, Backends confidential. Manche Backends können auch auf Access Type bearer-only gestellt werden.

Als Login-Theme kann das nli Thema gewählt werden.

Roles

Die im keycloak definierten Roles werden nach einem Login an der entsprechenden Session des Nutzers gespeichert und dienen der Steuerung der zugreifbaren (B2B-Backend) bzw. anzeigbaren Inhalte (B2B-New-UI).

Hinzufügen einer Rolle

Alle in diesem Kapitel aufgeführten Rollen müssen wie im Folgenden dargestellt eingerichtet werden:

Hinzufügen einer Rolle

Eine vollständige Liste aller Rollen finden Sie hier.

Beim Anlegen der Rollen unterstützt auch das auf der nächsten Seite beschriebene Migrationstool.

Mandantentrennung

Die neue UI unterstützt Mandantentrennung mit Hilfe von Keycloak.

Mandanten werden innerhalb der B2B in der neuen Extension TENANTS gepflegt.

Einem User können ein oder mehrere Mandanten zugewiesen werden, indem die Mandanten innerhalb Keycloaks dem User als Attribute tenants zugewiesen werden.

Weitere Details zur Mandantentrennung können Sie hier nachlesen.

Beim migrieren der Mandanten unterstützt auch das auf der nächsten Seite beschriebene Migrationstool.

Users

Damit man sich beim Aufruf der B2B-New-UI auch anmelden kann, muss zumindest ein Nutzer im keycloak hinterlegt werden. Dies kann unter dem Menüpunkt “Users” vorgenommen werden:

Aufruf des Formulars zum Erstellen eines Benutzers

Zunächst wird wie im Folgenden dargestellt ein Testbenutzer angelegt:

Erstellen eines Benutzers

Nach dem Klick auf “Save”, wird dessen Detailansicht im keycloak angezeigt. Um dem Nutzer die benötigten Rollen zuzuweisen, sind dieser unter dem entsprechenden Register auszuwählen und zuzuordnen:

Zuordnen der Rollen zu einem Benutzer

Sie können dann folgende Möglichkeiten nutzen:

  • sie nutzen das auf der nächsten Seite beschriebene Migrationstool um User aus der B2B-Datenbank nach Keycloak zu migrieren.
  • Sie binden ihr LDAP an Keycloak an.
  • Sie legen weiter manuell User in Keycloak an.

Mapper

Die Konfiguration des Keycloak-Mappers für den Client unter allen Benutzer ähnelt der des Clients b2b-function-ui und fss-ui hier.

Migration

Das auf der nächsten Seite beschriebene Migrationstool unterstützt beim Anlegen der Rollen sowie beim Migrieren der User & Mandanten.

View Me   Edit Me