CodamAIDocs
Themafertig

Der Mandantenschlüssel

Warum der Schlüssel unveränderlich ist, welche Zeichen erlaubt sind und dass er zugleich der Datenbankname ist. Wie er bei einer Selbstregistrierung gebildet wird.

Ausprägungen
aus Firmennameaus Mail-Domaineigene Bildungsregel

Worum es geht

Jeder Mandant hat einen Schlüssel, zum Beispiel nordbau oder stadtwerke-nord. Der Schlüssel ist der Name, unter dem das ganze System den Mandanten kennt:

  • Er steht im Token, als Attribut tenant oder als Alias der Organisation.
  • Er ist der Name der Datenbank des Mandanten.
  • Er ist das, was das Mandanten-Tor bei CIAS nachfragt.

Daneben hat ein Mandant einen Anzeigenamen (displayName), zum Beispiel „Nordbau GmbH“. Den lesen Menschen. Fehlt er, zeigt CIAS den Schlüssel.

Die Regeln

RegelGrund
nur Kleinbuchstaben a–z, Ziffern 0–9 und Bindestrich -Das sind die Zeichen, die CDMS als Datenbanknamen annimmt. CDMS prüft sie direkt vor dem CREATE DATABASE noch einmal
mindestens ein Zeichenein leerer Name bezeichnet nichts
höchstens 64 ZeichenMySQL erlaubt für einen Namen nicht mehr
nicht system und nicht singleDiese Namen nutzt CDMS selbst: system ist die System-Datenbank, single die eine Datenbank im Betrieb SINGLE. Ein Mandant mit so einem Namen landete dort
eindeutig in der ganzen Installationeine Datenbank je Mandant; die Tabelle cias_tenant erzwingt das mit einer Eindeutigkeitsregel
unveränderlichsiehe oben; es gibt keinen Endpunkt, der ihn ändert

CIAS prüft diese Regeln schon, wenn ein Mandant angelegt wird, nicht erst bei der Einrichtung der Datenbank. Sonst gäbe es womöglich schon eine Organisation in Keycloak, bevor der Name an der Datenbank scheitert.

Ist das ein gültiger Schlüssel?
SchlüsselErgebnis
nordbaugültig
stadtwerke-nord-2gültig
systemungültig, reserviert
Nordbauungültig, Großbuchstabe
nord_bauungültig, Unterstrich
müllerungültig, Umlaut
65 Zeichen langungültig, zu lang

Ein ungültiger Schlüssel beim Anlegen ergibt 400 cias.tenancy.invalid-request, und die Meldung sagt, welche Regel verletzt ist. Ein bereits vergebener ergibt 409 cias.tenancy.key-already-used.

Anzeigename statt Umbenennen

Firmen ändern ihren Namen. Dafür ist der Anzeigename da: Er darf alles enthalten, auch Umlaute und Leerzeichen, und er ist nicht Teil einer Datenbank. Aus „Nordbau GmbH“ kann später „Nordbau Holding GmbH“ werden, der Schlüssel bleibt nordbau.

Über die Verwaltungs-API lässt sich der Anzeigename beim Anlegen setzen. Einen eigenen Endpunkt zum Ändern gibt es nicht.

Wie der Schlüssel bei einer Selbstregistrierung entsteht

Bei einer Selbstregistrierung füllt eine Person ein Formular aus. Nach einem Datenbanknamen fragt das Formular nicht. Deshalb bildet CIAS den Schlüssel selbst, wenn weder die Konfiguration des Ablaufs noch ein Hook einen nennt.

Schlüsselbildung bei der Selbstregistrierung
  1. CIAS
    Quelle wählen
    Feld company ausgefüllt? Sonst die Domain der E-Mail-Adresse ohne Endung
    ↳ nein keine Quelle → Registrierung scheitert mit einem Konfigurationsfehler
  2. CIAS
    Umformen
    Akzente weg, klein schreiben, alle anderen Zeichen zu -, höchstens 48 Zeichen
    ↳ nein nichts Brauchbares übrig → Konfigurationsfehler
  3. CIAS
    Frei?
    Gibt es den Schlüssel schon, oder ist er reserviert? Dann -2, -3 … bis -20 anhängen. Aus der Firma „System“ wird so system-2
    ↳ nein alle vergeben → Konfigurationsfehler
  4. Schlüssel für den neuen Mandanten
Die Quellen des Schlüssels

Wann: Das Formular enthält company: "Café Ruiz & Söhne".

Akzente werden entfernt, nicht umschrieben: aus é wird e, aus ö wird o, nicht oe. & und Leerzeichen werden zu einem einzigen Bindestrich.

Ergebnis: cafe-ruiz-sohne

Wann: Kein Firmenname, Adresse anna@muster-bau.de.

Genommen wird die Domain ohne ihre letzte Endung. Der Teil vor dem @ wird nie verwendet: info oder d.mertins wären entweder bei vielen Kunden gleich oder nach einer einzelnen Person benannt.

Ergebnis: muster-bau; aus example.co.uk würde example-co

Wann: muster-bau gibt es bereits.

CIAS probiert muster-bau-2, dann muster-bau-3 und so weiter bis -20. Deshalb ist der Stamm auf 48 Zeichen begrenzt: So passt der Zusatz noch in die 64.

Ergebnis: muster-bau-2

Wann: Eine Installation will eine andere Regel, etwa ue statt u für ü, oder eine Kundennummer.

Sie stellt eine eigene Bean vom Typ TenantKeyFactory bereit. CIAS nutzt dann diese statt der eingebauten. Der Zusatz -2 bis -20 und die Prüfung der Regeln laufen trotzdem.

Ergebnis: Liefert die eigene Regel einen ungültigen Schlüssel, scheitert die Registrierung mit einem Konfigurationsfehler.

Geprüft wird „frei?“ bei der Registrierung, angelegt wird der Mandant aber erst, wenn die Person ihre Adresse bestätigt hat, also Minuten oder Tage später. Nehmen zwei Registrierungen in dieser Zeit denselben Schlüssel, scheitert die zweite an der Eindeutigkeitsregel. CIAS reserviert keinen Namen für eine Registrierung, die vielleicht nie bestätigt wird.

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-kernel – TenantKey (^[a-z0-9-]+$, höchstens 64 Zeichen, isValid, RESERVED, isReserved); CIAS/cias-tenancy – Tenant.create; CIAS/cias-authentication – TenantGate; parent-commons – ReservedTenantKeys
  • CIAS/cias-tenancy – Tenant (key unveränderlich, displayName, rename), V1__cias_tenant.sql (tenant_key VARCHAR(64), uq_cias_tenant_key)
  • CIAS/cias-registration – SlugTenantKeyFactory (company, Mail-Domain, höchstens 48 Zeichen), TenantKeyFactory, RegistrationService.deriveTenantKey (Zusatz -2 bis -20), CiasRegistrationConfiguration
  • commons-persistence – MySqlDatabaseCreator (Namensprüfung vor CREATE DATABASE)
Suchen