In diesem Dokument wird erläutert, was userVerification
in WebAuthn ist und wie sich Browser verhalten, wenn userVerification
beim Erstellen oder bei der Authentifizierung mit Passkeys angegeben wird.
Was ist die „Nutzerbestätigung“ in WebAuthn?
Passkeys basieren auf Public-Key-Kryptografie. Wenn Sie einen Passkey erstellen, wird ein Paar aus einem privaten und einem öffentlichen Schlüssel generiert. Der private Schlüssel wird vom Passkey-Anbieter gespeichert und der öffentliche Schlüssel wird an den Server der vertrauenden Partei (Relying Party, RP) zurückgegeben, um dort gespeichert zu werden. Der Server kann einen Nutzer authentifizieren, indem er eine Signatur, die mit demselben Passkey signiert wurde, mit dem gekoppelten öffentlichen Schlüssel überprüft. Das Flag „Nutzer anwesend“ (User Present, UP) für öffentliche Schlüsselanmeldedaten beweist, dass während der Authentifizierung jemand mit dem Gerät interagiert hat.
Die Nutzerbestätigung ist eine optionale Sicherheitsebene, mit der sichergestellt werden soll, dass die richtige Person bei der Authentifizierung anwesend war und nicht nur irgendeine Person, wie bei der Nutzeranwesenheit. Auf Smartphones erfolgt dies in der Regel über die Displaysperre, entweder biometrisch oder mit einer PIN oder einem Passwort. Ob die Nutzerüberprüfung durchgeführt wurde, wird im Flag „UV“ angegeben, das bei der Registrierung und Authentifizierung mit Passkeys in den Authentifikatordaten zurückgegeben wird.


So werden UP und UV auf dem Server validiert
Die booleschen Flags für die Nutzeranwesenheit (User Presence, UP) und die Nutzerbestätigung (User Verified, UV) werden im Feld „Authenticator Data“ an den Server gesendet. Bei der Authentifizierung kann der Inhalt des Authentifikatordatenfelds validiert werden, indem die Signatur mit dem gespeicherten öffentlichen Schlüssel überprüft wird. Solange die Signatur gültig ist, kann der Server die Flags als echt betrachten.

Bei der Registrierung und Authentifizierung mit Passkeys sollte der Server prüfen, ob das UP-Flag je nach Anforderung true
oder false
und das UV-Flag true
oder false
ist.
userVerification
-Parameter angeben
Gemäß der WebAuthn-Spezifikation kann der RP sowohl bei der Erstellung als auch bei der Assertion von Anmeldedaten eine Nutzerbestätigung mit einem userVerification
-Parameter anfordern. Es akzeptiert 'preferred'
, 'required'
oder 'discouraged'
, was Folgendes bedeutet:
'preferred'
(Standard): Die Verwendung einer Methode zur Nutzerbestätigung auf dem Gerät wird bevorzugt, kann aber übersprungen werden, wenn sie nicht verfügbar ist. Das Antwort-Anmeldedatenobjekt enthält den UV-Flag-Werttrue
, wenn die Nutzerbestätigung durchgeführt wurde, undfalse
, wenn sie nicht durchgeführt wurde.'required'
: Es ist erforderlich, eine auf dem Gerät verfügbare Methode zur Nutzerbestätigung aufzurufen. Wenn keine verfügbar ist, schlägt die Anfrage lokal fehl. Das bedeutet, dass das Antwort-Anmeldedaten immer mit dem UV-Flag auftrue
zurückgegeben werden.'discouraged'
: Die Verwendung einer Methode zur Nutzerbestätigung wird nicht empfohlen. Je nach Gerät kann die Nutzerüberprüfung jedoch trotzdem durchgeführt werden und das UV-Flag kanntrue
oderfalse
enthalten.
Beispielcode für die Passkey-Erstellung:
const publicKeyCredentialCreationOptions = {
// ...
authenticatorSelection: {
authenticatorAttachment: 'platform',
residentKey: 'required',
requireResidentKey: true,
userVerification: 'preferred'
}
};
const credential = await navigator.credentials.create({
publicKey: publicKeyCredentialCreationOptions
});
Beispielcode für die Passkey-Authentifizierung:
const publicKeyCredentialRequestOptions = {
challenge: /* Omitted challenge data... */,
rpId: 'example.com',
userVerification: 'preferred'
};
const credential = await navigator.credentials.get({
publicKey: publicKeyCredentialRequestOptions
});
Welche Option sollten Sie für userVerification
auswählen?
Der userVerification
-Wert, den Sie verwenden sollten, hängt von Ihren Anwendungsanforderungen und den Anforderungen an die Nutzerfreundlichkeit ab.
Verwendung von userVerification='preferred'
Verwenden Sie userVerification='preferred'
, wenn Sie die Nutzerfreundlichkeit wichtiger als den Schutz finden.
Es gibt Umgebungen, in denen die Nutzerbestätigung mehr Aufwand als Schutz bedeutet. Wenn Touch ID beispielsweise auf macOS nicht verfügbar ist (weil das Gerät sie nicht unterstützt, sie deaktiviert ist oder sich das Gerät im Clamshell-Modus befindet), wird der Nutzer stattdessen aufgefordert, sein Systempasswort einzugeben. Das führt zu Problemen und der Nutzer bricht die Authentifizierung möglicherweise ganz ab. Wenn es Ihnen wichtiger ist, Reibung zu vermeiden, verwenden Sie userVerification='preferred'
.

Bei userVerification='preferred'
ist das UV-Flag true
, wenn die Nutzerbestätigung erfolgreich durchgeführt wurde, und false
, wenn die Nutzerbestätigung übersprungen wurde. Auf macOS, wo Touch ID nicht verfügbar ist, wird der Nutzer beispielsweise aufgefordert, auf eine Schaltfläche zu klicken, um die Nutzerbestätigung zu überspringen. Die Anmeldedaten für den öffentlichen Schlüssel enthalten das UV-Flag false
.
Die UV-Kennzeichnung kann dann ein Signal in Ihrer Risikoanalyse sein. Wenn der Anmeldeversuch aufgrund anderer Faktoren riskant erscheint, sollten Sie dem Nutzer möglicherweise zusätzliche Anmeldebestätigungen präsentieren, wenn die Nutzerbestätigung nicht durchgeführt wurde.
Verwendung von userVerification='required'
Verwenden Sie userVerification='required'
, wenn Sie der Meinung sind, dass sowohl UP als auch UV unbedingt erforderlich sind.
Ein Nachteil dieser Option ist, dass die Anmeldung für den Nutzer umständlicher sein kann. Wenn Touch ID beispielsweise auf macOS nicht verfügbar ist, wird der Nutzer aufgefordert, sein Systempasswort einzugeben.
Mit userVerification='required'
können Sie dafür sorgen, dass die Nutzerüberprüfung auf dem Gerät erfolgt. Achten Sie darauf, dass der Server prüft, ob das UV-Flag true
ist.
Fazit
Durch die Nutzerbestätigung können sich Passkey-RPs ein Bild davon machen, wie wahrscheinlich es ist, dass sich der Geräteinhaber anmeldet. Es liegt in ihrer Entscheidung, ob sie eine Nutzerbestätigung verlangen oder sie optional machen, je nachdem, wie kritisch sich der Fallback-Anmeldemechanismus auf den Nutzerfluss auswirkt. Achten Sie darauf, dass der Server das UP-Flag und das UV-Flag für die Passkey-Nutzerauthentifizierung prüft.