Worum es geht
Jeder Mandant in CIAS hat eine Art, im Code TenantType. Sie sagt nicht, was der Mandant fachlich ist. Ein Kunde ist ein Kunde, egal welche Art er hat. Die Art sagt nur, wie Keycloak den Mandanten kennt und damit, wie er ins Token kommt:
STATIC: Keycloak kennt den Mandanten gar nicht. Die Person trägt ihn als Benutzerattributtenantan ihrem Konto.DYNAMIC: Keycloak führt den Mandanten als Organisation. Die Person ist Mitglied dieser Organisation.
Die beiden Arten nebeneinander
| STATIC | DYNAMIC | |
|---|---|---|
| In Keycloak | nichts | Organisation, ihr Alias ist der Mandantenschlüssel |
| Wie eine Person dazugehört | Attribut tenant am Konto | Mitgliedschaft in der Organisation |
| Wo er im Token steht | Claim tenant | Claim organization |
| Mandanten je Person | einer, dazu Ziele für den Wechsel in allowedTenants | beliebig viele Mitgliedschaften |
| Eigene Rollen im Mandanten | nein, die Rollen des Tokens gelten | ja, Rollen je Organisation |
| Feld am CIAS-Datensatz | externalOrganizationId leer | externalOrganizationId = ID der Organisation |
| Typischer Einsatz | wenige, fest eingerichtete Kunden; bestehende Installationen | Selbstregistrierung von Firmen, Personen in mehreren Firmen |
Der Alias einer Organisation ist ihr Kurzname in Keycloak, zum Beispiel nordbau. CIAS legt Organisationen immer so an, dass der Alias gleich dem Mandantenschlüssel ist. Deshalb kann die Filterkette aus dem Token direkt den Mandanten ablesen.
So sieht es im Token aus
STATIC – Anna gehört fest zum Mandanten stadtwerke-nord
{
"sub": "3f2a…",
"tenant": "stadtwerke-nord",
"allowedTenants": ["stadtwerke-nord"],
"resource_access": { "cdms": { "roles": ["customer-read"] } }
}DYNAMIC – Ben ist Mitglied der Organisation nordbau
{
"sub": "8c1d…",
"tenant": "nordbau",
"allowedTenants": ["nordbau"],
"organization": {
"nordbau": {
"id": "b7e0…",
"resource_access": { "cdms": { "roles": ["order-edit"] } }
}
}
}Beim dynamischen Mandanten steht der Schlüssel zweimal im Token: als Organisation und im Attribut tenant. Das ist Absicht. Wenn CIAS eine Person einem Mandanten zuordnet, schreibt es tenant und allowedTenants immer, auch bei einer Organisation. Beide Werte sind gleich und können sich deshalb nicht widersprechen. Würde das Attribut einen anderen Mandanten nennen als die Organisationen, lehnte die Filterkette die Anfrage ab, siehe Den Mandanten einer Anfrage bestimmen.
Rollen je Art
Wann: Anna arbeitet im statischen Mandanten stadtwerke-nord.
Es gelten die Client-Rollen aus resource_access und die Realm-Rollen. Jede Rolle, die Anna hat, gilt in ihrem Mandanten. Ein zweiter Mandant mit anderen Rollen ist nicht möglich.
Ergebnis: Einfach und vorhersehbar: eine Person, ein Mandant, ein Satz Rollen.
Wann: Ben arbeitet im dynamischen Mandanten nordbau.
Trägt die Organisation eigene Rollen, ersetzen diese die globalen Client-Rollen. Trägt sie keine, gelten die globalen Client-Rollen. Realm-Rollen gelten immer und werden von keiner Organisation erweitert.
Ergebnis: Ben kann in nordbau Bearbeiter sein und in einer zweiten Organisation nur Leser.
Wie die effektiven Rollen genau entstehen, steht unter Effektive Rollen: global oder im Mandanten.
Wie ein Mandant zu seiner Art kommt
Die Art wird beim Anlegen festgelegt und ändert sich danach nicht.
| Weg | Art | Was in Keycloak passiert |
|---|---|---|
Selbstregistrierung einer Firma (CREATE_NEW) | immer DYNAMIC | CIAS legt die Organisation an, der Alias ist der neue Schlüssel |
Verwaltungs-API POST /cias/admin/tenants | muss im Aufruf stehen, es gibt keinen Standard | nichts; bei DYNAMIC nennt der Aufruf die ID einer Organisation, die es schon gibt |
| Erster Mandant beim Start (Bootstrap) | aus der Konfiguration | nichts |
Warum die Verwaltungs-API keinen Standard kennt: Ein dynamischer Mandant ohne Organisation lässt sich aus keinem Token bestimmen, und ein statischer Mandant, zu dem es doch eine Organisation gibt, würde aus dem falschen Grund aufgelöst. Also muss der Aufruf sagen, welche Art gemeint ist. Mehr unter Einen Mandanten anlegen und bereitstellen.
Welche Art passt?
| Personen gehören zu mehreren Firmen? | Rollen sollen je Firma verschieden sein? | Firmen registrieren sich selbst? | Empfehlung |
|---|---|---|---|
| ja | – | – | DYNAMIC |
| – | ja | – | DYNAMIC |
| – | – | ja | DYNAMIC, die Selbstregistrierung legt ohnehin nur solche an |
| nein | nein | nein | STATIC genügt; eine Person, ein Mandant, die Rollen aus dem Token |
Beide Arten dürfen in einer Installation nebeneinander vorkommen. Die Art steht am Mandanten, nicht an der Installation.