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).
Wie sieht das aus?
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.
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
Einen weiteren Artikel zu diesem Thema finden Sie übrigens auch bei uns auf der Website. Jannik Hüls hat einen Artikel über Automatisiertes Access-Management geschrieben.
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Dieter Dirkes
Solutions & Sales
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.