Keycloak Organizations für Mandantenfähigkeit nutzen
Keycloak hat mit dem aktuellen Major-Release 26 die Organizations als Standard-Feature eingeführt - was ist das und was kann diese Funktionalität? Die Entwickler selbst beschreiben das Feature als einen Schritt Richtung Mandantenfähigkeit. Vielmehr ist es aber ein Feature zur Strukturierung von Nutzergruppen. Die genaue Funktionalität, Einsatzszenarien und Unterschiede zu bisherigen Konzepten sollen in diesem Artikel sortiert werden. Zuvor aber eine Aufstellung darüber, was Organizations sind und was sie nicht sind - denn alleine der Begriff “Mandantenfähigkeit” weckt Wünsche, die dieses Feature möglicherweise nicht vollständig erfüllen kann.
Organizations erlauben…
- … in Keycloak Benutzer unterschiedlichen Unternehmen zuzuordnen und separat gelistet zu verwalten
- … eine Unterstrukturierung eines Realms
- … jeweils die Einbindung von Nutzern über eigene Identity Provider pro Organization
- … eigene Schritte bzgl. Authentication zu definieren
- … Organization-spezifische Claims im Token abzulegen
Organizations erlauben es jedoch nicht…
- … Organization-spezifische Admins zu definieren, die die Benutzer verwalten können.
- … eigene Themes, Clients, Auth-Flows, Rollen und Gruppen zu definieren
- … Mandanten und deren Benutzer vollständig zu isolieren
Bevor Organizations genutzt werden können, muss das Feature in den Realm Settings aktiviert werden:
Wozu Organizations?
Organizations sind also ein weiteres Element, das es erlaubt, einen Realm zu strukturieren und dienen als reine Verwaltungseinheit. Hierbei stellt sich insbesondere die Frage, wann dieses Element genutzt werden kann und wann die Strukturierung stattdessen über Gruppen oder Realms hergestellt werden sollte.
- Realms trennen alle ihre Inhalte hart von den Inhalten anderer Realms. Ein eigener Realm ist fast wie eine eigene kleine Keycloak Installation. Darin enthaltene Clients, Gruppen, Rollen, Organizations und alle Einstellungen sind unabhängig von anderen Realms.
- Gruppen fassen Benutzer innerhalb eines Realms zusammen. Benutzer können in mehreren Gruppen sein. Benutzer einer Gruppe können definierte Rollen und Berechtigungen automatisch durch ihre Gruppenzugehörigkeit erhalten.
- Organizations fokussieren die Konfiguration von eigenen Identity Providern, Auth- und Onboarding-Prozessen sowie zugehörige Token Claims.
Kurz gesagt: Organizations erlauben die Anpassung des Login-Prozesses je Organization innerhalb desselben Realms.
Das beinhaltet sowohl die Quelle der Benutzerdaten (Identity Provider) als auch den Prozess des Logins. Dies führt im Übrigen insbesondere auch dazu, dass durch Organizations der Identity-First Login aktiviert wird. Hierbei gibt der Benutzer zuerst seinen Benutzernamen ein. Anhand der Organization-Zugehörigkeit und der Mail-Adresse des Benutzers wird der passende Identity Provider bestimmt und der Benutzer auf dessen Login-Maske geworfen.
Ebenfalls können Attribute für die Organization festgelegt werden. Wird der organization-Scope aktiviert, kann die Organization-Zugehörigkeit und -Attribute im Token angezeigt werden.
Tutorial
Mit diesem kleinen Tutorial lernen Sie Organizations kennen und zu konfigurieren.
- Organizations in den Realm Settings aktivieren. Screenshot s. oben.
- Organizations im linken Hauptmenü auswählen und eine neue Organization anlegen. Über die Domain kann gesteuert werden, dass Benutzer, deren Mail-Adresse dieser Domain entspricht, automatisch der Organization hinzugefügt werden können. 
- In den Einstellungen der Organization im Tab “Identity Providers” können wir jetzt zuvor konfigurierte Provider dieser Organization hinzufügen. Wählt man hier die Option “Redirect when email domain matches” aus, so wird der Benutzer direkt auf die Loginseite des Identity Providers weitergeleitet, wenn seine Mail-Adresse der definierten Domain entspricht. 
- Loggt sich der Benutzer nun ein, wird er automatisch anhand seiner Mail Adresse der Organization zugeordnet. Sein Membership Type ist “Managed”, da dieser Benutzer konkret über die Organization beigetreten ist und ohne diese nicht existieren kann. Fügen wir dem Realm stattdessen manuell Benutzer hinzu und ordnen diese danach einer Organization zu, sind diese Benutzer “Unmanaged”, da sie normal im Realm existieren und nicht von einer Organization abhängig sind. 
- Wenn wir jetzt im Attributes Tab der Organization ein Attribut definieren, können wir dieses im Token aller Organization-User ausspielen lassen. Dazu definieren wir im ersten Schritt ein Attribut. Danach aktivieren wir die Option Client scopes -> organization -> Mappers -> organization -> Add organization attributes. Dann werden bei Anforderung des organization-Scopes sowohl die Organization-Zugehörigkeit, als auch die Attribute (in diesem Beispiel “information=wichtiges_tag”) dem Token hinzugefügt. 
Fazit
- Organizations helfen Benutzer nach Identity Providern oder manuell zu sortieren
- Organizations erlauben die Token-Konfiguration und steuern individuelles Login-Verhalten
- Es findet keine Separierung in dem Sinne statt, dass je Organisation ein Admin nur seine eigenen User verwalten kann (soll aber noch kommen: https://github.com/keycloak/keycloak/issues/30180)
- Mandantenfähigkeit wird daher insbesondere im SaaS-Kontext unterstützt, indem ein Kunde sich nicht selbst administriert
Weitere Beiträge
von Stefan Gries & Jens Lehnhoff
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Blog-Autor*innen
Stefan Gries
IAM & IT Consultant, Software Engineer
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Jens Lehnhoff
IT Delivery Manager
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.