In diesem Dokument wird erläutert, was userVerification
in WebAuthn ist und welches Browserverhalten sich ergibt, wenn userVerification
während der Erstellung oder Authentifizierung eines Passkeys angegeben wird.
Was ist „Nutzerbestätigung“ in WebAuthn?
Passkeys basieren auf der Public-Key-Kryptografie. Beim Erstellen eines Passkeys wird ein öffentliches und privates Schlüsselpaar generiert, der private Schlüssel wird vom Passkey-Anbieter gespeichert und der öffentliche Schlüssel zum Speichern an den Server der vertrauenden Partei (RP) zurückgegeben. Der Server kann einen Nutzer authentifizieren, indem er eine Signatur, die mit demselben Passkey signiert wurde, mit dem verknüpften öffentlichen Schlüssel überprüft. Das Flag „User Present“ (UP) auf einem öffentlichen Schlüsselnachweis beweist, dass während der Authentifizierung jemand mit dem Gerät interagiert hat.
Die Nutzerüberprüfung ist eine optionale Sicherheitsebene, mit der sichergestellt werden soll, dass bei der Authentifizierung die richtige Person anwesend war, nicht nur eine beliebige Person, wie bei der Nutzerpräsenz. Bei Smartphones erfolgt dies in der Regel mithilfe der Displaysperre, entweder biometrische Daten oder eine PIN oder ein Passwort. Mit dem Flag „UV“, das bei der Registrierung und Authentifizierung des Passkeys in den Authentifizierungsdaten zurückgegeben wird, wird angezeigt, ob die Nutzerbestätigung durchgeführt wurde.
So werden UP und UV auf dem Server validiert
Die booleschen Flags „User Presence“ (UP) und „User Verified“ (UV) werden dem Server im Datenfeld des Authenticators signalisiert. Während der Authentifizierung kann der Inhalt des Datenfelds des Authenticators durch Überprüfung der Signatur mit dem gespeicherten öffentlichen Schlüssel validiert werden. Solange die Signatur gültig ist, kann der Server die Flags als echt betrachten.
Bei der Registrierung und Authentifizierung von Passkeys sollte der Server prüfen, ob das UP-Flag true
ist und ob das UV-Flag true
oder false
ist, je nach Anforderung.
Parameter userVerification
angeben
Gemäß der WebAuthn-Spezifikation kann der RP sowohl bei der Erstellung als auch bei der Bestätigung von Anmeldedaten eine Nutzerbestätigung mit einem userVerification
-Parameter anfordern. Es werden 'preferred'
, 'required'
oder 'discouraged'
akzeptiert, was Folgendes bedeutet:
'preferred'
(Standardeinstellung): Die Verwendung einer Nutzerbestätigungsmethode auf dem Gerät ist bevorzugt, kann aber übersprungen werden, wenn sie nicht verfügbar ist. Die Anmeldedaten in der Antwort enthalten den Wert „true
“, wenn die Nutzerüberprüfung durchgeführt wurde, und „false
“, wenn die Nutzerüberprüfung nicht durchgeführt wurde.'required'
: Es muss eine auf dem Gerät verfügbare Bestätigungsmethode für Nutzer aufgerufen werden. Ist keine verfügbar, schlägt die Anfrage lokal fehl. Das bedeutet, dass die Anmeldedaten der Antwort immer mit dem UV-Flag zurückgegeben werden, das auftrue
gesetzt ist.'discouraged'
: Die Verwendung einer Nutzerbestätigungsmethode wird nicht empfohlen. Je nach Gerät kann die Nutzerbestätigung jedoch trotzdem durchgeführt werden und die UV-Markierung kanntrue
oderfalse
enthalten.
Beispielcode zum Erstellen eines Passkeys:
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?
Welchen userVerification
-Wert Sie verwenden sollten, hängt von den Anwendungsanforderungen und der Nutzerfreundlichkeit ab.
Verwendung von userVerification='preferred'
Verwenden Sie userVerification='preferred'
, wenn Sie die Nutzerfreundlichkeit über den Schutz stellen.
Es gibt Umgebungen, in denen die Nutzerbestätigung mehr Aufwand als Schutz bedeutet. Wenn Touch ID beispielsweise unter 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 kann die Authentifizierung ganz abbrechen. Wenn Sie die Abläufe möglichst reibungslos gestalten möchten, 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. Unter 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 Public-Key-Anmeldedaten enthalten dann das UV-Flag false
.
Die UV-Markierung kann dann ein Signal für Ihre Risikoanalyse sein. Wenn der Anmeldeversuch aufgrund anderer Faktoren riskant erscheint, sollten Sie dem Nutzer zusätzliche Anmeldebestätigungen vorlegen, 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 Nutzer möglicherweise etwas umständlicher ist. Unter macOS, wo Touch ID nicht verfügbar ist, wird der Nutzer beispielsweise aufgefordert, sein Systempasswort einzugeben.
Mit userVerification='required'
können Sie dafür sorgen, dass die Nutzerüberprüfung auf dem Gerät durchgeführt wird. Der Server muss prüfen, ob das UV-Flag true
ist.
Fazit
Mithilfe der Nutzerbestätigung können Parteien, die Passkeys verwenden, die Wahrscheinlichkeit einschätzen, dass sich der Geräteinhaber anmeldet. Sie können selbst entscheiden, ob eine Nutzerbestätigung erforderlich ist oder ob sie optional sein soll, je nachdem, wie wichtig der Fallback-Anmeldemechanismus den Ablauf für den Nutzer beeinflusst. Der Server muss das UP- und UV-Flag für die Passkey-Nutzerauthentifizierung prüfen.