Ein blaugrüner Schlüssel mit U-Boot© Collage: BWI GmbH/Oliver Kunkel / Adobe Stock/Karrrtinki
Tech Corner - Deep Dive Keycloak von Jan Strohschein

Dynamisches Rollen- und Rechtemanagement

5 min
29. September 2023

Keycloak ist eine Open-Source-Lösung für das Identitäts- und Zugriffsmanagement, die eine zentralisierte Authentifizierungs- und Autorisierungsplattform für Anwendungen und Dienste bietet. Sie wurde von Red Hat entwickelt, und ist darauf ausgelegt, eine Single-Sign-On-Lösung für Anwendungen zu bieten, die On-Premises oder in der Cloud bereitgestellt werden.

Das Identitäts- und Zugriffsmanagementsystem Keycloak unterstützt auch die Protokolle Security Assertion Markup Language (SAML) und OpenID Connect (OIDC). Das System wird anhand von Zugangsberechtigungen zu den Filialen der fiktiven Supermarktkette "Buy all the things!" für die Mitarbeitenden mittels Keycloak modelliert und die Vorteile der dynamischen Auswertung von Rollen- und Rechten werden aufgezeigt.

In diesem fiktiven Beispiel nutzt die Supermarktkette digitale Schlüsselkarten für die Zugangsberechtigungen zu den Filialen. Die ganz klassischen Rollen- und Rechtekonzepte weisen einer Person entweder die systemweite Rolle des Marktleiters oder Mitarbeiters zu. Der fiktive Mitarbeiter Fabian und der erdachte Marktleiter Thorsten dürfen mit ihrer Schlüsselkarte die Türen öffnen, der Marktleiter kann jedoch zusätzlich neue Schlüsselkarten einrichten bzw. die Rechte von nicht mehr benötigten Karten löschen.

Das erste Problem tritt dann auf, wenn ein Marktleiter in einem klassischen System mit seiner digitalen Schlüsselkarte zu einem anderen Supermarkt fährt. Seine Schlüsselkarte weist ihn als Marktleiter aus, und damit dürfte er auch dort die Türen öffnen und neue Karten anlegen. Dieses Verhalten kann erwünscht sein, beispielsweise bei Mitarbeitenden aus der Firmenzentrale, die in allen Märkten Zutritt bekommen sollen. Für den Supermarktleiter einer Filiale ist es jedoch nicht notwendig. Die modernen Ansätze vergeben daher Rechte an einzelnen Ressourcen, in diesem Beispiel eine bestimmte Rolle in einer bestimmten Supermarktfiliale. Natürlich sollen diese verschiedenen Berechtigungen bei mehreren Tausend Filialen nicht alle von Hand, sondern dynamisch definiert werden.

Hintergrund: Keycloak von Red Hat

Keycloak bietet eine breite Palette von Funktionen. Neben der Unterstützung für Single-Sign-On sind auch Benutzerverwaltung und Identitätsvermittlung enthalten. Das macht es zu einem leistungsstarken Tool für die Verwaltung des Zugriffs auf Anwendungen und Dienste in modernen Umgebungen. Es unterstützt auch Social Login, Zwei-Faktor-Authentifizierung und andere fortgeschrittene Sicherheitsfunktionen, was es zu einer geeigneten Wahl für Anwendungen der Enterprise-Klasse macht.

Ob als eigenständige Anwendung verwendet oder mit anderen Anwendungen und Diensten über die verschiedenen APIs oder Client-Bibliotheken integriert: Keycloak  unterstützt eine Reihe von populären Protokollen wie SAML, OAuth  und OpenID Connect, was die Integration mit einer Vielzahl von Anwendungen und Diensten einfach macht.

Insgesamt ist Keycloak eine umfassende und funktionsreiche Lösung für die Verwaltung von Authentifizierung und Autorisierung in modernen Anwendungen und Diensten und damit gut geeignet für den Einsatz in Unternehmensumgebungen, in denen Sicherheit ein Hauptanliegen ist.

Zwei Konzepte: Resources und Scopes

In Keycloak sind "Resources" und "Scopes" zwei unterschiedliche Konzepte, die verwendet werden, um den Zugang zu geschützten Ressourcen zu kontrollieren.

Ressourcen beziehen sich auf die spezifischen schützenswerten Elemente oder Aktionen, zum Beispiel spezifische Endpunkte in einer API oder bestimmte Seiten in einer Web-Anwendung. Für die Definition von Ressourcen muss im ersten Schritt ein Ressourcenserver angelegt werden, bevor für diesen die einzelnen Ressourcen erstellt werden können. Anschließend können Policies und Permissions verwendet werden, um zu kontrollieren, welche Benutzer Zugriff auf welche Ressourcen haben.

© Jan Strohschein

Scopes hingegen sind eine zusätzliche Ebene der Granularität für die Kontrolle des Zugriffs auf Ressourcen. Scopes stellen einzelne "Berechtigungen" oder "Privilegien" dar, die Benutzer oder Client-Anwendungen an bestimmten Ressourcen haben. Scopes werden definiert, indem Scope-Ressourcen erstellt und bestimmten Ressourcen zugeordnet werden. In unserem Beispiel gibt es zwei verschiedene Scopes („Zugang“ und “Zugangsverwaltung“) für die jeweiligen Filialen. Der eine gewährt den Zugang mit der Schlüsselkarte, der andere erlaubt es, über eine Zugangsverwaltung die Schlüsselberechtigungen der Mitarbeitenden anzupassen.

© Jan Strohschein

Zusammenfassend lässt sich sagen, dass sich Ressourcen auf die spezifischen schützenswerten Elemente beziehen, während Scopes eine Granularitätsebene für die Kontrolle des Zugriffs auf diese Ressourcen darstellen. Mithilfe von Policies und Permissions kann der Zugriff einzelner Benutzer oder Client-Anwendungen auf bestimmte Ressourcen oder Scopes gesteuert werden.

Zugangskontrolle durch Policies und Permissions

Keycloak verwendet Policies und Permissions, um den Zugang zu den Ressourcen auf eine fein abgestufte Weise zu kontrollieren. Wenn ein Benutzer versucht, auf eine geschützte Ressource zuzugreifen, überprüft Keycloak die Permissions des Benutzers, um festzustellen, ob er auf die Ressource zugreifen darf.

In Keycloak werden Policies verwendet, um die Bedingungen zu definieren, unter denen einem Benutzer der Zugriff auf eine Ressource gewährt oder verweigert wird. Es ist beispielsweise möglich eine Policy zu erstellen, die nur Benutzern mit einer bestimmten Rolle den Zugriff auf eine Ressource erlaubt. Policies können jedoch auch andere Bedingungen wie den Standort des Benutzers oder die Tageszeit überprüfen.

Eine Permission verbindet das zu schützende Objekt und die Policies, die ausgewertet werden müssen, um zu entscheiden, ob der Zugriff gewährt werden soll. Permissions können zum Schutz von Ressourcen oder Scopes erstellt werden.

Um Ressourcen mit Policies und Permissions zu sichern, müssen zunächst die benötigten Policies und Permissions erstellt werden. Anschließend können diese Policies und Permissions auf bestimmte Ressourcen oder Gruppen von Ressourcen angewendet werden. Auf diese Weise wird der flexible und fein abgestimmte Zugriff auf Ressourcen umgesetzt.

Für unser Beispiel werden Policies und Permissions genutzt, um die Berechtigungen für den Zugang und die Zugangsverwaltung sowohl für den Mitarbeiter Fabian als auch für den Leiter eines Marktes zu modellieren.

Es wird zunächst eine Permission für die "filiale1-zugang", die den Scope freigibt "zugang" Ressource "filiale1" erstellt.

Diese Permission wird sowohl dem Mitarbeiter als auch dem Marktleiter über die entsprechende Policy gewährt. Im ersten Schritt erstellen wir eine User Policy, die prüft, ob ein Benutzer eine bestimmte Rolle besitzt. Die Policy verifiziert in dem unten gezeigten Diagramm, dass Fabian ein Mitarbeiter der Filiale1 ist und gibt damit den Zugang frei.

© Jan Strohschein

Für den Marktleiter Thorsten legen wir nun eine weitere Policy "filiale1-leiter" an, die überprüft, ob der Benutzer die Rolle "filiale1-leiter"besitzt. Da dies der Fall ist wird auch Thorsten der Zugang zu der Filiale gewährt.

© Jan Strohschein

Letztlich soll auch die Berechtigung auf den Scope "zugangsverwaltung" für die Filiale modelliert werden. Dazu wird eine weitere Permission "filiale1-zugangsverwaltung" angelegt und mit den bereits vorhandenen Komponenten verbunden.

© Jan Strohschein

Diese Art der Modellierung von Rollen und Rechten zeigt auf, wie Keycloak genutzt werden kann, um den fein abgestimmten Zugriff auf Privilegien an einer Ressource zu definieren. Jedoch ist dieser Ansatz noch verbesserungswürdig. Für jede weitere Filiale unserer Supermarktkette und jeden weiteren Scope müssen die dazugehörigen Policies und Permissions angelegt werden. Änderungen müssen auf jede einzelne Komponente angewandt und mühsam nachgezogen werden. Die Lösung dafür sind Javascript basierte Policies, die den Kontext der Anfrage in die Auswertung einbeziehen

Javascript basierte Policies

In Keycloak können mit Javascript basierten Policies benutzerdefinierte Autorisierungsregeln definiert werden. Diese Policies können eine benutzerdefinierte Autorisierungslogik implementieren, die mit den von Keycloak angebotenen eingebauten Policy-Typen nicht möglich ist.

Um eine Javascript-basierte Policy in Keycloak zu erstellen, wird eine Javascript-Funktion definiert. Diese gibt einen booleschen Wert zurück, der angibt, ob die Policy als "wahr" oder "falsch" bewertet werden soll. Die Funktion sollte ein einziges Argument haben, nämlich ein Objekt, das den Kontext für die Auswertung der Policy enthält. Dieses Objekt enthält Informationen wie die Identität des Benutzers, die Ressource, auf die zugegriffen wird, und die Umgebung, in der die Policy ausgewertet wird. Sobald die Javascript-Funktion für Ihre Policy definiert ist, kann sie in Keycloak verwenden werden, indem eine Policy mit dem Typ "JavaScript" angelegt und der Quellcode hineinkopiert wird.

Die dynamische Javascript-Policy, im Diagramm in grau dargestellt, nutzt nun also den in grün gezeigten Kontext, nämlich den Namen der Ressource, um die benötigte Rolle des Mitarbeiters abzuleiten. So können Policy und Permission generisch angelegt und einfach angepasst werden, sollten sich die Anforderungen ändern.

Der Quellcode dieser Javascript-Policy "filiale-mitarbeiter" sieht folgendermaßen aus:

var resource_client = "supermarktkette";
var role_suffix = "-mitarbeiter";

// die benötigte Rolle wird von der angefragten Ressource abgeleitet var permission = $evaluation.getPermission();
var resource_name = permission.getResource().getName();
var resource_role = resource_name + role_suffix;

// die ID des anfragenden Nutzers wird ausgelesen
var identity = $evaluation.getContext().getIdentity();
var user_id = identity.getId();

// es wird überprüft ob der Benutzer die benötigte Rolle auf diesem ResourceServer besitzt
if (realm.isUserInClientRole(user_id, resource_client, resource_role)) {
    $evaluation.grant();
}

Javascript basierte Policies sind also eine leistungsstarke und flexible Methode, um eine benutzerdefinierte Autorisierungslogik in Keycloak zu implementieren. Sie ermöglichen es, benutzerdefinierten Code zu schreiben, um komplexe Bedingungen zu bewerten und dynamisch Entscheidungen darüber zu treffen, ob der Zugriff auf eine Ressource gewährt oder verweigert werden soll.

Autor: Dr. Jan Strohschein / Lead DevOps Engineer

Jan ist seit Oktober 2021 bei der BWI und arbeitet im Center of Excellence Software Engineering in der Abteilung Software Data Solutions & Analytics. Im Rahmen seiner Promotion beschäftigte er sich mit dem Einsatz von AI in Industrie 4.0 und hat dort eine Big Data Plattform implementiert. Momentan arbeitet er an dem neuen Krisenvorsorgeinformationssystem Bund (KVInfoSysBund). Dieses System dient der IT-gestützten Erstellung präziser Lagebilder zur Planung von Maßnahmen, um deutsche Staatsangehörige und Schutzbefohlene bei Krisen im Ausland zu schützen und gegebenenfalls zu evakuieren.

© Alexander Buchner

Mehr zum Thema

Die offizielle Keycloak-Dokumentation finden Sie auf der Keycloak-Website unter der folgenden URL: https://www.keycloak.org/documentation.html

Die Dokumentation bietet detaillierte Informationen über Keycloak und seine verschiedenen Funktionen, einschließlich Installations-, Konfigurations- und Nutzungsanweisungen. Sie enthält auch einen Entwickler-Leitfaden und eine API-Referenz für diejenigen, die daran interessiert sind, Keycloak mit anderen Anwendungen und Diensten zu integrieren.

Zusätzlich zur Dokumentation bietet die Keycloak-Community eine Reihe von Ressourcen wie ein Forum und eine Mailingliste, wo Sie Fragen stellen und Hilfe bei der Benutzung von Keycloak erhalten können. Diese Ressourcen können auch auf der Keycloak-Website gefunden werden.

Das könnte Sie auch interessieren:
 

 
 BWI bereitet sich auf quantensichere Kryptographie vor
Post-Quanten-Kryptografie
2 min
16. April 2024

BWI bereitet sich auf quantensichere Kryptographie vor

#Bundeswehr

#Digitale Verteidigungsfähigkeit

In nicht allzu ferner Zukunft werden die ersten Quantencomputer auf den Markt kommen. Diese bedrohen die Sicherheit heutiger Public-Key-Verfahren, eingesetzt für asymmetrische Verschlüsselung und Signaturen. Im Bereich der Post-Quanten-Kryptographie…
2 min
16. April 2024
 
Schnellere Softwareentwicklung für die Bundeswehr – die „Platform42“ der BWI
Software Defined Defence
3 min
13. Februar 2024

Schnellere Softwareentwicklung für die Bundeswehr – die „Platform42“ der BWI

#Bundeswehr

#Digitale Verteidigungsfähigkeit

Digitalisierung wird für die Fähigkeitsentwicklung der deutschen Streitkräfte immer wichtiger – und immer drängender. Software kommt dabei eine besondere Bedeutung zu, da sich mit ihr Systeme schneller aktualisieren lassen. Eine neue Plattform der…
3 min
13. Februar 2024