Worum es geht
Die Nordbau GmbH will die Anwendung nutzen. Niemand legt ihr von Hand etwas an: Anna Berg füllt ein öffentliches Formular aus, und am Ende gibt es einen Mandanten nordbau-gmbh, eine Organisation in Keycloak, eine Datenbank und ein Konto, das darin arbeiten kann.
Diese Seite spielt den Fall einmal von vorn bis hinten durch. Für die Einzelheiten verlinkt sie die Seiten, die den jeweiligen Schritt allein beschreiben.
Die Beteiligten
| Wer | Was er in diesem Fall tut |
|---|---|
| Anna Berg | füllt das Formular aus, klickt den Link, setzt ihr Passwort, legt die ersten Daten an |
| CIAS | führt den Registrierungsvorgang, legt Mandant und Organisation an, vergibt die Startrollen |
| Keycloak | hält das Konto, die Organisation und später das Token |
| Plattform-Administrator | gibt die Registrierung frei |
| Persistenz (CDMS) | legt die Datenbank des Mandanten an und migriert ihr Schema |
| CDMS | liefert die Daten, sobald Anna angemeldet ist |
Wer welche Farbe hat, steht unter Die Beteiligten einer Anfrage.
Der ganze Weg
sequenceDiagram
participant B as Anna
participant C as CIAS
participant K as Keycloak
participant M as E-Mail
participant A as Plattform-Admin
participant P as Persistenz
B->>C: POST /cias/registration/self<br/>email, Vorname, Nachname, company „Nordbau GmbH“
C->>C: Drosselung, Felder prüfen, Schlüssel nordbau-gmbh bilden
C->>K: Konto deaktiviert und unbestätigt anlegen
C->>M: Bestätigungsmail mit Einmal-Link
C-->>B: 202 accepted
M-->>B: Mail
B->>C: klickt den Link (POST /cias/registration/verify)
C->>M: „Ihre Registrierung wird geprüft“
Note over C,A: Vorgang wartet in PENDING_APPROVAL
A->>C: POST /cias/admin/registrations/{id}/approve
C->>K: Adresse bestätigt, Konto freischalten, Passwort verlangen
C->>K: Organisation nordbau-gmbh anlegen
C->>P: Mandant anlegen, Datenbank einrichten
P-->>C: fertig
C->>K: Anna wird Mitglied der Organisation
C->>K: Attribute tenant und allowedTenants setzen
C->>K: Startrollen in der Organisation vergeben
C->>C: Benutzerdatensatz anlegen, Vorgang COMPLETED
C->>M: Willkommensmail, möglichst mit Link zum Passwort-Setzen
Block 1: Die Person beweist ihre Adresse
-
1Benutzer→CIASschickt das Formular ab. Pflicht sind
emailundcompany, ein Passwortfeld gibt es nicht -
2CIASprüft die Drosselung: höchstens 10 Versuche je Adresse in 10 Minuten
-
3CIASbildet aus
companyden Mandantenschlüssel. Aus „Nordbau GmbH“ wirdnordbau-gmbh -
4CIAS→Keycloaklegt das Konto deaktiviert und unbestätigt an
-
5CIAS→E-Mailschickt die Bestätigungsmail. Gespeichert wird nur der Hash des Links
-
6CIAS→Benutzerantwortet
202 { "status": "accepted" }– dieselbe Antwort, egal ob die Adresse neu ist -
7Benutzer→CIASklickt den Link. Er gilt in
cias-runtime24 Stunden und nur einmalErgebnis: VorgangVERIFIED. Es gibt noch keinen Mandanten und keine Rollen
Einzelheiten: Selbstregistrierung, E-Mail bestätigen, Der Mandantenschlüssel.
Block 2: Ein Mensch gibt frei
Ein öffentliches Formular, das Mandanten anlegt, legt sie in dem Takt an, in dem es aufgerufen wird. Deshalb steht in cias-runtime die Freigabe standardmäßig auf „nötig“ (CIAS_SELF_SERVICE_APPROVAL).
-
1CIASVorgang →
PENDING_APPROVAL, die Person bekommt die MailAPPROVAL_PENDING -
2Admin→CIASfindet den Vorgang über
GET /cias/admin/registrations?state=PENDING_APPROVAL -
3CIASprüft, dass der Aufrufer Plattform-Administrator istEine Mandanten-Administratorin darf nicht freigeben
-
4Admin→CIAS
approve– und im selben Aufruf beginnt die BereitstellungErgebnis:APPROVED→PROVISIONING
CIAS schickt Administratoren keine Mail, wenn etwas zu genehmigen ist. Die Verwaltungsoberfläche fragt die Liste ab. Einzelheiten: Freigabe durch einen Administrator.
Block 3: Alles entsteht auf einmal
-
1CIASbestimmt die Startrollen für die Situation
TENANT_FOUNDERund prüft, dass es jede davon gibtfehlt eine Rolle:FAILED -
2CIAS→KeycloakAdresse als bestätigt markieren, Konto freischalten, „Passwort setzen“ verlangen
-
3CIAS→KeycloakOrganisation anlegen: Alias
nordbau-gmbh, Name „Nordbau GmbH“ -
4CIAS→DatenbankMandant
nordbau-gmbhanlegen, ArtDYNAMIC, mit Verweis auf die Organisation. In MULTI wird dabei die Datenbank des Mandanten eingerichtet -
5CIAS→KeycloakAnna wird Mitglied der Organisation
-
6CIAS→KeycloakAttribute
tenantundallowedTenantsam Konto aufnordbau-gmbhsetzen -
7CIAS→KeycloakStartrollen vergeben, in der Organisation, auf dem Client dieser Installation
-
8HookCIAS legt den Benutzerdatensatz an und setzt ihn auf
ACTIVE, danach laufen eigene Hooks -
9CIAS→E-MailWillkommensmail, möglichst mit Link zum Passwort-SetzenErgebnis: Vorgang
COMPLETED. Anna kann sich anmelden
Scheitert einer dieser Schritte, endet der Vorgang in FAILED. Ein Plattform-Administrator wiederholt ihn dann mit retry oder verwirft ihn mit discard. Einzelheiten: Was beim Abschluss passiert.
Die beiden Zustandsreihen nebeneinander
Registrierung und Mandant haben eigene Zustände. Sie hängen zusammen, aber sie sind nicht dasselbe. Die Registrierung ist ein Vorgang, der endet; der Mandant ist ein Kunde, der bleibt.
| Moment | Registrierung | Mandant: Stellung | Mandant: Rollout |
|---|---|---|---|
| Formular abgeschickt | PENDING_VERIFICATION | gibt es noch nicht | – |
| Link geklickt | VERIFIED | gibt es noch nicht | – |
| wartet auf Freigabe | PENDING_APPROVAL | gibt es noch nicht | – |
| genehmigt | APPROVED → PROVISIONING | gibt es noch nicht | – |
| Datensatz geschrieben | PROVISIONING | PENDING | IN_PROGRESS |
| Datenbank eingerichtet | PROVISIONING | ACTIVE | PROVISIONED |
| Rollen, Benutzerdatensatz, Mail | COMPLETED | ACTIVE | PROVISIONED |
Der Mandant entsteht also erst im letzten Block und ist innerhalb weniger Augenblicke ACTIVE. Bedient wird er, sobald die Stellung ACTIVE ist und das heutige Datum im Gültigkeitsfenster liegt. Alle Zustände einzeln: Die Zustände einer Registrierung und Der Lebenslauf eines Mandanten.
Das Passwort und der erste Login
CIAS sieht nie ein Passwort. Die Willkommensmail enthält einen Link auf die Passwortseite von Keycloak; lässt sich der Link nicht erzeugen, führt die Mail zur Anmeldung, und Anna nutzt dort „Passwort vergessen“.
-
1Benutzer→Keycloaksetzt das Passwort auf der Seite von Keycloak
-
2Benutzer→Keycloakmeldet sich an
-
3Keycloak→Clientstellt das Token aus: Claim
organizationmitnordbau-gmbh, AttributetenantundallowedTenants, die Startrollen in der OrganisationErgebnis: Der BFF hält das Token und schickt es bei jeder Anfrage mit
Einzelheiten: Das Passwort setzen, Anmelden im Browser, Passwort-Setz-Link erneut schicken.
Die erste Anfrage an CDMS
-
CIASToken prüfenIst das Token gültig und nicht abgelaufen?↳ nein 401
-
CIASMandant bestimmenGenau eine Organisation im Token →
nordbau-gmbh↳ nein 403cias.authentication.tenant-unresolved -
CIASMandanten-TorWird
nordbau-gmbhbedient, alsoACTIVEund im Gültigkeitsfenster?↳ nein 403cias.authentication.tenant-not-served -
CIASEffektive RollenHat Anna Rollen in der Organisation? Dann gelten nur diese
-
CDMSModellrolleErlaubt eine ihrer effektiven Rollen das Lesen dieses Modells?↳ nein 403
-
CDMSDatenbankIn MULTI: die Datenbank von
nordbau-gmbh - Die Liste kommt zurück – leer, denn der Mandant ist neu
Den vollständigen Weg beschreibt Vom Login bis zu den Daten.
Was die Gründerin kann – und was die Installation dafür einrichten muss
Die Startrollen sind kein fester Code, sondern ein Regelwerk. Was die Gründerin am ersten Tag tun kann, hängt deshalb daran, was die Installation in dieses Regelwerk geschrieben hat.
| Was sie tun will | Woran es hängt | Was dafür nötig ist |
|---|---|---|
| sich anmelden und in ihrem Mandanten arbeiten | Mitgliedschaft in der Organisation | entsteht bei der Bereitstellung, ist also da |
| Daten in CDMS lesen und anlegen | Modellrollen von CDMS | Die Startrollen-Regel der Installation muss sie nennen. Die ausgelieferte Grundeinstellung vergibt nur tenant-owner, tenant-admin und tenant-user |
| eine Kollegin einladen | die Rollen aus required-caller-roles des Ablaufs TENANT_ADMIN | ausgeliefert ist tenant-admin, und die Gründerin bekommt sie mit ihren Startrollen |
| einer Kollegin eine Rolle geben | Delegation im Rollenkatalog und Obergrenze | Ausgeliefert: tenant-user und tenant-admin kann sie vergeben, denn beide sind an ihre Rollen delegiert und sie hält sie selbst. tenant-owner vergibt nur ein Plattform-Administrator. Für weitere Rollen, etwa aus CDMS, muss die Installation Delegation und Startrollen einrichten |
| Mandanten anlegen oder sperren | Plattformrolle | darf nur ein Plattform-Administrator, nie eine Mandanten-Administration |
Verwalten kann die Gründerin ihren Mandanten also ab dem ersten Tag allein. Soll sie auch mit den Daten arbeiten, schreibt die Installation eine Regel der Installation für die Situation TENANT_FOUNDER mit den Modellrollen und trägt die passenden Delegationen in den Rollenkatalog ein. Beides sind bewusste Entscheidungen der Plattform, kein Nebeneffekt der Registrierung.
Einzelheiten: Startrollen als Regelwerk, Eine Rolle vergeben, Der Rollenkatalog, Die Obergrenze.
Die Ausprägungen
Wann: Die Installation setzt approval-required: false, wie es der Hub tut.
Block 2 entfällt. Nach dem Klick auf den Link beginnt sofort die Bereitstellung, und die Willkommensmail kommt wenige Sekunden später.
Ergebnis: Wer so arbeitet, braucht einen anderen Schutz vor massenhaft angelegten Mandanten, etwa eine Oberfläche nur mit Einladungscode.
Wann: CDMS_TENANT_MODE=MULTI und die CDMS-Persistenz läuft im selben Prozess.
Beim Anlegen des Mandanten wird die Datenbank nordbau-gmbh angelegt und ihr Schema migriert. Das dauert Sekunden bis Minuten und geschieht vor der Willkommensmail.
Ergebnis: Die erste Anfrage des Kunden trifft eine fertige Datenbank. Siehe Datenbanken, Pools, Migration.
Wann: CDMS_TENANT_MODE=SINGLE, oder CIAS läuft als eigener Dienst ohne CDMS-Persistenz.
Die Einrichtung hat nichts zu tun und meldet sofort Erfolg. Bei einem eigenständigen CIAS legt CDMS die Datenbank später bei der ersten Anfrage an.
Ergebnis: Der Mandant ist sofort ACTIVE. In SINGLE spielt er für Anfragen keine Rolle, siehe In SINGLE zählt der Mandant im Token nicht.
Wann: Zu Annas Adresse gibt es bereits ein Konto, etwa bei einem anderen Kunden.
CIAS legt kein zweites Konto an und ändert am bestehenden nichts, auch nicht das Passwort. Sie bekommt statt der Bestätigungsmail eine Mail, die zum Beitritt führt. Löst sie den Link ein, entsteht der neue Mandant, und ihr bestehendes Konto wird seine Gründerin. Die Antwort an das Formular ist dieselbe wie bei einer neuen Adresse.
Ergebnis: Siehe Die E-Mail ist das Konto.
Wann: Es gibt schon einen Mandanten nordbau-gmbh.
Schon beim Absenden des Formulars versucht CIAS nordbau-gmbh-2 bis -20. Der Anzeigename bleibt „Nordbau GmbH“.
Ergebnis: Siehe Der Mandantenschlüssel.
Wann: Keycloak ist nicht erreichbar, eine Startrolle fehlt, oder ein eigener Hook wirft.
Der Vorgang geht nach FAILED. Die Person bekommt keine Mail. Der Fehler trifft die Anfrage, die die Bereitstellung ausgelöst hat – hier also den Aufruf approve des Administrators.
Ergebnis: Ein Plattform-Administrator behebt die Ursache und ruft retry auf, oder verwirft den Vorgang mit discard.
Wann: Eine Installation stellt tenant-assignment: NONE ein.
Es entsteht kein Mandant und keine Organisation. Die Person bekommt die Rollen der Situation TENANTLESS. Das Feld company braucht es dann nicht.
Ergebnis: Sinnvoll nur dort, wo ein Mensch den Mandanten danach zuordnet.