Keycloak ist eine System Komponente zur Authentifizierung von Benutzern, die aus verschiedenen Quellen stammen können. Im folgenden Fall wird Keycloak mit der B2B Datenbank verknüpft.
Keycloak Konfiguration
Diese Seite beschreibt die Konfiguration in der Adminoberfläche von Keycloak mit Blick auf die Anbindung der B2B.
Die Admin-Oberfläche ist über http://<MY-HOST>:<MY-PORT>/
erreichbar.
Der Port kann in der Datei standalone/configuration/standalone.xml
in der Zeile <socket-binding name="http" port="${jboss.http.port:<MY-PORT>}"/>
ermittelt werden.
Falls der Port für gewöhnlich NICHT für Webaufrufe verwendet wird (z.B. 6667), muss das eventuell für den verwendeten Browser erst freigeschaltet werden.
Für Firefox geht das über about:config
und das Hinzufügen der Eigenschaft network.security.ports.banned.override
.
Diese beinhaltet einen String der Form Port-Port
und könnte wie folgt sein 6660-6670
um den eben erwähnten 6667
verwenden zu können.
Vor der ersten Anmeldung am Keycloak-Server muss ein neuer Benutzer angelegt werden, siehe dazu den Abschnitt Admin anlegen in der Installationsanleitung.
Für jede Landschaft von Anwendungen, welche über Keycloak mit der gleichen Benutzerdatenbank abgesichert werden soll,
muss in Keycloak ein Realm
angelegt werden.
Für jede Anwendung innerhalb dieser Landschaft, welche sich bei Keycloak authentifizieren soll, muss ein Client konfiguriert werden.
Im ersten Schritt betrachten wir den Realm.
Realm
Der Master Realm
ist für die Administration von Keycloak und steht in keinem Zusammenhang zur Anbindung der B2B.
Für die Anbindung der B2B by Practice und weiteren folgenden Komponenten, wird ein neuer Realm angelegt, in unserem Beispiel b2b-qa
.
Sollten mehrere Systemstufen (Entwicklungs-, Test- und Produktionssystem) an den gleichen Keycloak Cluster angebunden werden,
müssen pro Stufe separate Realms angelegt werden.
Innerhalb eines Realms wird zum Beispiel die Benutzerdatenbank (User Federation
) definiert.
Die Dokumentation Server Administration Guide (Create a New Realm) bietet weitere Information.
In den allgemeinen Einstellungen des Realm kann die Überschrift auf der durch Keycloak bereitgestellten Login-Seite konfiguriert werden (Display name
bzw. HTML Display name
).
Realm Settings
Im Menü Realm Settings finden sich allgemeine Konfiguration für den ganzen Realm.
Im Untermenü Tokens können verschiedene Gültigkeitszeiträume konfiguriert werden. Besonders interessant ist die Access Token Lifespan: Diese sollte aus Sicherheitsgründen möglichst niedrig eingestellt werden. Falls es einem Angreifer gelingt, ein Token zu stehlen, ist dadurch der Schadenszeitraum limitiert. Andererseits bedeutet eine niedrige Lifespan auch, dass das Token regelmäßig erneuert werden muss, wodurch die Browser der User häufiger mit dem Keycloak Server kommunizieren müssen.
Clients
In diesem Abschnitt betrachten wir die Konfiguration der Clients innerhalb eines Realms.
Pro Anwendung, Service oder Microservice, welcher zu einer Landschaft von Anwendungen gehört muss im Realm ein Client angelegt werden. Eine kurze Erläuterung, was mit dem Begriff “Anwendung” bzw. “Landschaft” gemeint ist, ist in der Einleitung im Abschnitt Applikationslandschaft zu finden.
Die Dokumentation Server Administration Guide (Managing Clients) bietet weitere Information.
In der Konfiguration der Clients
erzeugen wir mit Create Client
einen Client.
(Ansicht, bevor ein Client mit B2B-Bezug angelegt wurde)
<my-host>
bei den folgenden Clients nicht localhost
sein.
Siehe dazu auch der Abschnitt localhost auf der Seite über Docker.Tomcat-Webapplikation
Der erste Client soll der B2B by Practice auf dem Tomcat entsprechen, wir nennen ihn also im Beispiel b2b-tomcat-war
.
Als Root URL
geben wir die Adresse der B2B inkl. Port an.
Nach der initialen Erstellung kann noch die Einstellung Direct Access Grants Enabled
deaktiviert werden.
Um weitere Anwendungen abzusichern, müssen weitere Clients konfiguriert werden.
B2B Benutzeroberfläche (B2BUI)
Für die B2B Benutzeroberfläche, im Folgenden B2BUI genannt, legen wir in der Keycloak Administration
einen weiteren Client
mit dem Namen b2b-functional-ui
an um Keycloak einen neuen Client für die Authentifizierung bekannt zu machen.
Der Port 4040
ist variabel und kann in der Einrichtung der B2BUI gewählt werden,
siehe dazu der Abschnitt zur application.yml.
Damit ist die Anwendung abgesichert. Alle im Realm
enthaltenen Clients
können per SSO angesprochen werden.