CodamAIDocs
Themafertig

Die E-Mail ist das Konto

Ein Konto pro Adresse, beliebig viele Mandanten. Was passiert, wenn sich eine bekannte Adresse registriert, und warum niemand ohne Zustimmung einem Mandanten hinzugefügt wird.

Ausprägungen
NEW_ACCOUNTADDITIONAL_MEMBERSHIPbekannt ohne Mandant → „bereits registriert“abgebrochenes Konto wird übernommengesperrtes Konto bleibt gesperrtälterer offener Versuch wird ersetzt

Worum es geht

In CIAS gilt: Eine E-Mail-Adresse ist ein Konto. Es gibt kein zweites Konto für dieselbe Adresse. Ein Konto kann aber Mitglied in beliebig vielen Mandanten sein.

Deshalb fragt jede Registrierung zuerst: Gibt es zu dieser Adresse schon ein Konto, das jemandem gehört? Die einzige Ausnahme ist das Überbleibsel eines abgebrochenen Versuchs: in Keycloak deaktiviert und die Adresse nie bestätigt. Jedes andere Konto gehört jemandem, auch ein gesperrtes oder geschlossenes.

Welche Art von Vorgang

Jede Registrierung hat eine Art (kind):

ArtWannWas mit dem Konto passiert
NEW_ACCOUNTDie Adresse hat kein Konto oder nur ein Überbleibsel.Ein Konto wird deaktiviert angelegt (oder das Überbleibsel übernommen) und nach dem Klick freigeschaltet.
ADDITIONAL_MEMBERSHIPDie Adresse hat ein Konto, auch ein gesperrtes.Nichts. Nach dem Klick kommen nur Mitgliedschaft und Rollen dazu. Ist das Konto gesperrt, scheitert der Vorgang.

Welche Mail die Person bekommt

Adresse und Mandant entscheiden über die Mail
Konto zur Adresse?Ablauf ordnet einen Mandanten zu?Mail und Folge
nein–VERIFY_EMAIL: Link bestätigt die Adresse, danach neues Konto
jajaMEMBERSHIP_INVITATION: Link führt zum Beitritt in den Mandanten. Passwort und Konto bleiben, wie sie sind
janeinALREADY_REGISTERED: „Sie haben bereits ein Konto“, mit Link zur Anmeldung

Die Links in den Mails gelten so lange, wie der Ablauf es festlegt (token-ttl), bei der Selbstregistrierung in cias-runtime 24 Stunden, bei der Einladung 14 Tage.

Von außen sehen alle drei Fälle gleich aus: Das Formular antwortet immer mit 202 accepted. Nur die Mail unterscheidet sich, und die bekommt nur, wer Zugriff auf das Postfach hat. So lässt sich über die API nicht herausfinden, ob eine Adresse ein Konto hat.

Sonderfälle

Was mit halben und doppelten Versuchen passiert

Wann: Zu der Adresse gibt es ein Konto in Keycloak, das nie freigeschaltet wurde, etwa von einer Registrierung, deren Link nie geklickt wurde.

Das Konto ist deaktiviert und seine Adresse nie bestätigt, es gilt also als Überbleibsel. Die neue Registrierung ist deshalb NEW_ACCOUNT, legt aber kein zweites Konto an, sondern übernimmt das vorhandene. Nach dem Klick wird es freigeschaltet.

Ergebnis: Kein Konto-Friedhof, keine Fehlermeldung „Adresse schon vergeben“.

Wann: Das Konto ist gesperrt oder geschlossen. In Keycloak ist es deaktiviert, die Adresse aber bestätigt.

Das Konto gehört jemandem. Die Registrierung ist ADDITIONAL_MEMBERSHIP und antwortet wie bei jeder bekannten Adresse mit 202. Löst die Person den Link ein, scheitert der Vorgang mit 422 cias.registration.account-locked, bevor Mandant oder Rollen vergeben werden. Das gilt auch, wenn das Konto erst gesperrt wurde, während die Mail unterwegs war.

Ergebnis: Eine Sperre hebt nur ein Administrator auf. Eine bestätigte Adresse ist dafür kein Grund.

Wann: Dieselbe Adresse hat noch einen Vorgang, der auf den Klick oder die Freigabe wartet.

Der ältere Vorgang geht sofort nach EXPIRED. Nur der Link aus der neuesten Mail gilt. Ein Klick auf den alten Link ändert nichts mehr.

Ergebnis: Wer die erste Mail nicht findet, registriert sich einfach noch einmal.

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-registration – RegistrationService (register: findByEmail, supersedeOpenAttempts, mailPurpose, tokenPurpose), RegistrationKind
  • CIAS/cias-registration – RegistrationService (isSomebodysAccount, provision: requireUnlocked)
  • CIAS/cias-user – RegistrationUserHook (onCompleted: activate nur für PENDING)
  • CIAS/cias-registration – RegistrationServiceTest (Übernahme, Ersetzen, LockedAccount)
  • CIAS/cias-registration/docs/adr – ADR-014
Suchen