enhancement
major
minor
defect
critical
major
minor
major
#30118
Passkeys je Anwendung entweder zum Anmelden ohne Passwort oder als zweiter Faktor, nicht beides zugleich
Kontext
Mit #30074 meldet sich ein Anwender der React-Oberfläche mit einem Passkey an - passwortlos oder als zweiter Faktor nach dem Passwort. Jeder angelegte Passkey galt dabei für beides zugleich: Er war auffindbar und meldete allein an, und weil das Konto damit einen zweiten Faktor "eingerichtet" hatte, verlangte die Anmeldung mit Passwort anschließend denselben Passkey. Wer sich mit dem Passkey allein anmelden kann, hat keinen Grund, zuvor Benutzername und Passwort einzugeben.
Verhalten
Die Anwendung legt fest, wofür Passkeys dienen (Option usage des PasskeyService), und bietet nur die dazu passende Einrichtung an:
- login (Vorgabe) - Anmelden ohne Passwort: Das Anmeldeformular bietet "Mit Passkey anmelden". Passkeys werden auffindbar und immer mit Benutzerverifikation (PIN/Biometrie) angelegt. In Einstellungen → Sicherheit verwaltet ein eigener Abschnitt Anmelden mit Passkey (nach Passwort) die Passkeys. Ein Passkey ist kein zweiter Faktor: Nach der Anmeldung mit Passwort wird kein Passkey verlangt, und ein Konto mit required ohne zweiten Faktor richtet die Authenticator-App ein. Die Anmeldung mit Passkey erfüllt MfaRequirement required. Auch ein Konto mit disabled darf Passkeys anlegen: Der Passkey ist hier ein Anmeldeverfahren wie das Passwort.
- second-factor - Passkey als zweiter Faktor: Das Anmeldeformular bietet keine Anmeldung mit Passkey (der Knopf ist verborgen). Passkeys werden nicht auffindbar angelegt. Der Block Passkeys steht im Abschnitt Zwei-Faktor-Authentifizierung neben der Authenticator-App; ein Konto mit Passkey bestätigt die Anmeldung nach dem Passwort damit, ein Konto mit required ohne zweiten Faktor kann bei der Anmeldung einen Passkey einrichten. Ein Konto mit disabled legt keine Passkeys an.
- Der Dienst weist eine Zeremonie ab, die nicht zur Einstellung passt (passwortlose Anmeldung bei second-factor, Passkey nach dem Passwort bei login), unabhängig davon, was eine Oberfläche anbietet.
- Gespeicherte Passkeys bleiben bei einem Wechsel der Einstellung erhalten. Ein als zweiter Faktor (nicht auffindbar) angelegter Passkey meldet nach dem Wechsel auf login nicht ohne Passwort an; der Anwender legt dann einen neuen an.
Technische Umsetzung
- PasskeyService.Config#getUsage() (usage, Aufzählung PasskeyUsage login / second-factor, Vorgabe login) bestimmt residentKey und Benutzerverifikation der Registrierung (PendingRegistration#requiresUserVerification), welche Anmeldungen startAuthentication annimmt (ERROR_NO_PASSWORDLESS_LOGIN, ERROR_NO_SECOND_FACTOR) und mayUsePasskeys.
- PasskeySecondFactor ist nur bei second-factor eingerichtet bzw. einrichtbar; damit folgen Statuszeile, Auswahl des Verfahrens bei der Anmeldung und Letzter-Faktor-Regel von <delete-passkey/>.
- <if-passkey-usage usage="…"> (PasskeyUsageElement) zeigt seinen Inhalt nur beim angegebenen Verwendungszweck und nimmt sonst keinen Platz ein; die Overlays der Einstellungen platzieren damit die gemeinsame Passkey-Liste (passkey-list.view.xml). Die Ansichten lesen die Konfiguration nicht per TL-Script (appConfig ist Administratoren vorbehalten).
- <passkey-login> verbirgt sich, wenn der Verwendungszweck seine Art der Anmeldung nicht erlaubt.
- Behoben: TLWebAuthn (com.top_logic.layout.react) beachtete das hidden-Flag nicht, wenn es als Kind eines anderen Controls gezeichnet wird (z.B. im Anmeldeformular); ein verborgener Knopf zeichnet nun nichts und startet keine Zeremonie.
- Kein neues Modellattribut, keine Datenmigration. Dokumentation: authentication/passkeys, authentication/mfa.
Verifikation
Tests TestPasskeyService, TestPasskeyCeremony, TestPasskeyUsageElement, TestDeletePasskeyAction, TestPasskeyFunctions, TLWebAuthn.test.tsx. In tl-demo-react mit dem virtuellen Authenticator von Chrome in beiden Verwendungszwecken geprüft: Knopf im Anmeldeformular, Platzierung in den Einstellungen, Anlegen (auffindbar bzw. nicht auffindbar), passwortlose Anmeldung bzw. Passkey nach dem Passwort, Anmeldung mit Passwort ohne Passkey-Abfrage bei login, Löschen.