Accessmanagement mit Keycloak

Keine Kommentare

In diesem Artikel stelle ich das Open-Source Projekt Keycloak vor, ein integriertes Single Sign-On und IDM für RESTful Web Services und Browser Apps.

Keycloak wird von Red Hat entwickelt und gefördert. Die Projektseiten befinden sich unter http://keycloak.jboss.org, die Sourcen sind in GitHub unter https://github.com/keycloak/keycloak zu finden. Lead-Entwickler sind im wesentlichen Stian Thorgersen, Bill Burke und Marek Posolda. Das Produkt ist komplett in Java beschrieben und bedient sich sehr ausgiebig an Red Hats Java Stack. So wird standardmässig WildFly als Applicationsserver eingesetzt und auch die Clustering- und HA-Funktionen von Wildfly werden genutzt.

Warum das Ganze?

Im Rahmen eines Kundenprojektes bestand die Aufgabe, eine vorhandene Lösung für das Access-Management abzulösen. Es wird eine zentrale, anwendungsübergreifende Authentifizierungslösung („Login“) mit Single-Sign-On-Funktionalität für alle Web-relevanten Anwendungen des Kunden benötigt. Weiterhin besteht der Ausblick auf Mehr-Faktor-Authentifizierungen und Social-Media-Login. Zielvolumen sind mehrere Millionen Online-Nutzer in allen Kontinenten für diverse Webanwendungen des Kunden.

Während der Evaluierung möglicher Kandidaten für die Ablösung haben wir uns dabei auch mit Keycloak beschäftigt und dieses Produkt letzendlich auch eingesetzt.

Was kann Keycloak?

Keycloak ist ein Java-basiertes System für Single-Sign-On. Es geht hier im wesentlichen um die Autorisierung für Web-Anwendungen, mobile Anwendungen und REST-Services. Hierfür bietet Keycloak die zentralen Funktionen wie Login, Logout, Selbstregistrierung und auch Mehr-Faktor Authentifizierung an.

Das System unterstützt für die Anmeldung alle gängigen Verfahren:

  • OAuth und OAuth2
  • OpenID-Connect
  • JWT
  • SAML
  • Kerberos

Realms

Innerhalb von Keycloak arbeitet das System mit sog. Realms, pro Realm gibt es eine eigene Benutzerverwaltung, Berechtigung, Workflows und UI-Themes.

Als Identity-Provider sind im Keycloak pro Realm LDAP und Kerberos als Provider konfigurierbar und Keycloak kann hier auch ein sog. sufficient login, sprich es werden alle Identity-Provider nach der Priorität befragt bis einer von diesen den anmeldenden User kennt (oder auch nicht). Auf diesem Weg kann man mit Keycloak z.B. auch mehrere Datentöpfe für interne User und Web-User in einem Realm nutzen.

Wer keine Windows-Domäne o.ä. hat und auch keinen zentralen LDAP kann Keycloak natürlich auch ohne Identity-Provider nutzen und alle Benutzer in Keycloak selbst anlegen und nutzen (hierzu gibt es dann z.B. auch die Selbstregistrierung).

Realm Overview

Wie sieht das aus?

Keycloak 1.9.5 main screen

Hochverfügbarkeit und Skalierbarkeit

Wie in der Einleitung bereits erwähnt setzt Keycloak sehr stark auf den Basisfunktionalitäten von WildFly auf. Hierzu gehört auch die Nutzung von Infinispan als Cache-Subsystem. Dies erlaubt es, alle relevanten Informationen über Benutzersessions zu n Clusternodes zu replizieren. Dies erlaubt es dem Loadbalancer, bei Ausfall des angesprochenen Knotens einfach einen anderen auszuwählen und auch dieser verfügt über alle Sessions. Die Praxis hat gezeigt, dass dies bei einem Cluster mit sechs Knoten und voller Replikation über alle Knoten perfekt funktioniert und wir im laufenden Betrieb einzelne Server ohne Auswirkung auf die Benutzer herunterfahren oder neustarten können.

Für die Persistenzschicht nutzt Keycloak entweder Hibernate oder aber MongoDB als dokumentenbasierte Datenbank.

Wir haben uns hier beim Kunden für ein MongoDB-Replikaset mit einem Master und fünf Slaves entschieden, dieses wird vom Mongo-Treiber direkt unterstützt und wir können ohne Arbitrator immer den gerade aktiven Master nutzen (ausserdem ist es extrem einfach installierbar und auch von Ansible gut unterstützt).

Da Keycloak selbst nur die Benutzerkonten, Realmkonfigurationen etc. aber die SessionInformationen in der Persistenzschicht speichert, kommt hier keine grosse Last auf und dieses Konstrukt funktioniert einwandfrei.

keycloak HA

Installation und Konfiguration

Ein Vorteil von Keycloak ist es, dass man die gesamte Konfiguration des Servers per Admin-API durchführen kann.
Wir nutzen Ansible für Installation und Konfiguration unserer Umgebung, hierbei kommen sämtliche konfigurative Artefakte aus dem Git des Kunden. Dies bietet uns den Vorteil, dass wir „nackte“ Keycloak Server per Ansible auspacken und die gesamte Konfiguration aus den Playbooks und Inventories heraus vornehmen können. In Folge dieses Vorgehens machen wir auch keine Updates mehr, sondern löschen die bestehende Installation und setzen diese inklusive der gesamten Konfiguration per Ansible einfach neu auf !

 

Ausblick

In weiteren Blogartikeln wollen wir folgende Details von und mit Keycloak vorstellen:

  • Single Sign On mit Keycloak
  • Nutzung von Authenticating Proxies mit Keycloak (mod_saml und mod_openidc)
  • API Security mit Keycloak
  • Mehr-Faktor-Authentifizierung
  • Social-Medial Login
Dieter Dirkes

Dieter Dirkes baut seit 2014 den Standort Münster für die codecentric AG auf. In seiner Rolle als Performance-Spezialist ist er aber auch immer noch beratend bei den Kunden tätig. Weiterhin beschäftigt er sich mit NoSQL-Datenbanken und ElasticSearch als Searchengine.
Ein weitere Schwerpunkt sind Security-Themen sowie Identity- und AccessManagement. Vor der codecentric hat er nach seinem Studium der Wirtschaftsinformatik bei Firmen wie der GAD, Wily, TogetherSoft und BEA Systems gearbeitet.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Artikel von Dieter Dirkes

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *