Zum Inhalt

Keycloak

Keycloak ist eine Open-Source-Identitäts- und Zugriffsverwaltungslösung, die eine zentrale Benutzerverwaltung für moderne Anwendungen und Dienste ermöglicht. Als robuste Authentifizierungs- und Autorisierungsplattform bietet Keycloak:

  • Single Sign-On (SSO) für Web-Anwendungen und RESTful Webservices
  • Unterstützung für verschiedene Authentifizierungsprotokolle (OpenID Connect, OAuth 2.0, SAML)
  • Integration mit externen Benutzerverzeichnissen (LDAP, Active Directory)
  • Zwei-Faktor-Authentifizierung und Social Login
  • Benutzer-Federation und Identity Brokering
  • Umfangreiche Administrative Funktionen und Benutzer-Self-Service

Die Plattform ermöglicht eine sichere und effiziente Verwaltung von Benutzeridentitäten und Zugriffsrechten über eine zentrale Stelle.

Bisher wird Keycloak ausschließlich vom InGrid-Editor verwendet. Weitere Komponenten werden folgen, mit dem Ziel, Keycloak in allen InGrid-Komponenten zu verwenden.


Systemvoraussetzungen

Systembestandteil Anforderung
Hardware Arbeitsspeicher 1 GB RAM
Festplattenspeicher 10 GB frei
Prozessor Dual Core CPU
Software Java Java 25
PostgreSQL Version 13 oder höher

Installation

Am einfachsten ist die Installation über Docker und unser bereitgestelltes Docker-Image. Dies beinhaltet folgende Konfigurationen:

  • neuer Realm für InGrid
  • angepasstes Theme, das sich an die InGrid-Komponenten angliedert
  • einfache Konfiguration der Emails für das Zurücksetzen des Passworts
  • Erstellung der benötigten Rollen
  • Erstellung der Clients
  • Erstellung des Super-Admins für die Verwaltung des InGrid-Editors
  • Verzögerter Start bis Datenbank bereit ist

Docker

Info

Zugang zum Docker Repository

login: readonly
password: readonly

Beispiel docker-compose.yml
services:

    keycloak:
        image: docker-registry.wemove.com/keycloak:${KEYCLOAK_VERSION}
        restart: unless-stopped
        environment:
          KC_BOOTSTRAP_ADMIN_USERNAME: admin
          KC_BOOTSTRAP_ADMIN_PASSWORD: admin
          KC_HTTP_RELATIVE_PATH: /keycloak
          KC_HOSTNAME: https://${HOST_URL}/keycloak
          KC_HTTP_ENABLED: true
          KC_DB: postgres
          KC_DB_URL_HOST: db
          KC_DB_USERNAME: ${DB_USERNAME}
          KC_DB_PASSWORD: ${DB_PASSWORD}
          MAIL_SMTP: mailrelay
          MAIL_FROM: ${MAIL_FROM}
          IGE_SUPER_USER_LOGIN: ige
          IGE_SUPER_USER_PASSWORD: ige
          IGE_SUPER_USER_FIRSTNAME: Max
          IGE_SUPER_USER_LASTNAME: Mustermann
          IGE_SUPER_USER_EMAIL: max.mustermann@beispiel.de
          EDITOR_URL: https://${HOST_URL}/editor
          EDITOR_SECRET: ${INGRID_EDITOR_SECRET}
          HARVESTER_URL: https://${HOST_URL}/harvester
          HARVESTER_SECRET: ${INGRID_HARVESTER_SECRET}
          INGRID_API_URL: https://${HOST_URL}/ingrid-api
          INGRID_API_SECRET: ${INGRID_API_SECRET}
        networks:
          - informationgrid-network

In einer weiteren Datei .env werden die Variablen für die docker-compose.yml Datei gesetzt.

Umgebungsvariablen

Da als Basis das Original-Keycloak-Image verwendet wird, können hier alle Umgebungsvariablen für Keycloak verwendet werden (Keycloak-Umgebungsvariablen). Zusätzlich werden von uns die folgenden Umgebungsvariablen bereitgestellt:

Variable Hinweis Defaultwert
EDITOR_URL Die URL zum Editor, welche für den Redirect verwendet wird
EDITOR_SECRET Das Secret für den Editor
HARVESTER_URL Die URL zum Harvester, welche für den Redirect verwendet wird
HARVESTER_SECRET Das Secret für den Client
INGRID_API_URL Die URL zur InGrid API, welche für den Redirect verwendet wird
INGRID_API_SECRET Das Secret für den InGrid API
IGE_SUPER_USER_EMAIL Die Email-Adresse des Super-Admins im InGrid-Editor
IGE_SUPER_USER_FIRSTNAME Der Vorname des Super-Admins im InGrid-Editor
IGE_SUPER_USER_LASTNAME Der Nachname des Super-Admins im InGrid-Editor
IGE_SUPER_USER_LOGIN Die Benutzername des Super-Admins im InGrid-Editor
IGE_SUPER_USER_PASSWORD Das Passwort des Super-Admins im InGrid-Editor
IMPRINT_URL Die URL für das Impressum, welches auf der Login-Seite gezeigt werden soll #
MAIL_SMTP_PORT Der Port des SMTP-Servers für das Versenden von Emails
MAIL_SMTP Der Host des SMTP-Servers für das Versenden von Emails
ORGANIZATION Die Organisation, welches auf der Login-Seite gezeigt werden soll Name der Organisation
PROFILE Auswahl eines Profils für spezielle Anpassungen des Themes
PRIVACY_NOTE_URL Die URL für den Datenschutz, welches auf der Login-Seite gezeigt werden soll #
SIMPLE_SECURITY Initialisiert das InGrid-Realm mit einfachen Anforderungen für das Passwort (keine Mindestlänge, ...) false
WAIT_FOR_DATABASE Warte auf die Datenbank, bevor Keycloak gestartet wird true
WAIT_FOR_DATABASE_TIMEOUT Maximale Wartezeit, die auf die Datenbank gewartet werden soll (in Sekunden) 180

RPM

Info

Schauen Sie sich auch die allgemeinen Informationen für das Installieren von RPMs hier an: Link

Installieren Sie das RPM über den folgenden Befehl:

sudo dnf install ingrid-keycloak

Stellen Sie sicher, dass die PostgreSQL-Datenbank mit dem Namen "keycloak" vorhanden ist und dem Datenbankbenutzer die Rechte korrekt gesetzt sind.

sudo -u postgres psql -c "CREATE DATABASE keycloak;"
Starten Sie danach Keycloak über den folgenden Befehl:

sudo systemctl start keycloak

# wenn automatisch gestartet werden soll beim Neustart des Systems
sudo systemctl enable keycloak

Sobald Keycloak läuft, muss der Admin-Benutzer erstellt und der InGrid-Realm eingerichtet werden. Die Einrichtung des Admin-Benutzers erfolgt über den Browser über http://localhost:8080. Sobald der Admin-Benutzer erstellt worden ist, kann der Realm erzeugt werden. Dies kann manuell erfolgen oder über ein bereitgestelltes Skript, welches sich hier befindet: /opt/keycloak/init.sh.

Manuelle Installation

Wird ein eigener Keycloak-Server verwendet, so müssen folgende Schritte getätigt werden:

  • Erstellung eines neuen Realms InGrid
  • Erstellung eines neuen Clients editor
    • Redirect-URIs: <URL-Editor>/*
    • Client authentication, Standard-Flow und Service account roles aktivieren
    • Client Secret unter Credentials für die Konfiguration des Editors nehmen
    • unter Roles die Client-Rollen user und admin erstellen
    • unter Service account roles füge diese Client-Rollen hinzu
      • view-realm, manage-users, query-clients und view-clients des Clients realm-management
    • unter Client scopes -> editor-dedicated
    • die predefinied Mapper client rolesund realm roles hinzufügen
      • in beiden Mappern Add to ID token aktivieren
    • wenn unter Scope die Option Full scope allowed deaktiviert werden soll (erhöhte Sicherheit), dann müssen folgende Rollen hinzugefügt werden:
      • alle Client-Rollen die auch unter Service account roles angelegt wurden
      • wegen Abwärtskompatibilität zusätzlich die Realm-Rollen:
        • ige-super-admin
        • ige-user
  • Erstellung eines neuen Clients editor-api (für OGC-Records-API und CSW-T)
    • Redirect-URIs: <URL-Editor>/*
    • Client authentication und Standard-Flow aktivieren
    • unter Client scopes -> editor-api-dedicated -> Scope die Option Full scope allowed deaktivieren und folgende Rollen hinzufügen:
      • user und admin vom Client editor
  • Erstellung eines neuen Clients harvester
    • Redirect-URIs: <URL-Harvester>/*
    • Client authentication und Standard-Flow aktivieren
    • Client Secret unter Credentials für die Harvester-Konfiguration nehmen
    • unter Roles die Client-Rollen viewer, editor und admin erstellen
  • Erstellung eines neuen Clients ingrid-api
    • Redirect-URIs: <URL-API>/*
    • Client authentication und Standard-Flow aktivieren
    • Client Secret unter Credentials für die InGrid-API-Konfiguration nehmen
    • unter Roles die Client-Rolle admin erstellen

Für die Administration der InGrid-Komponenten, muss ein Benutzer angelegt werden, der die entsprechenden Client-Rollen erhält - Erstellung eines Benutzers mit der Client-Rolle (editor) admin, um den InGrid-Editor einzurichten