Nutzerüberprüfung im Detail

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 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 mit demselben Passkey mithilfe des gekoppelten öffentlichen Schlüssels überprüft. Der „Nutzer anwesend“ (UP) für Anmeldedaten mit öffentlichem Schlüssel weist darauf hin, dass eine Person während der Authentifizierung mit dem Gerät interagiert hat.

Bei der Nutzerbestätigung handelt es sich um eine optionale Sicherheitsebene, mit der bei der Authentifizierung die richtige Person und nicht nur eine bestimmte Person angezeigt werden soll. Bei Smartphones erfolgt dies in der Regel mithilfe der Displaysperre, entweder biometrische Daten oder eine PIN oder ein Passwort. Unter „UV“ wird angegeben, ob die Nutzerbestätigung durchgeführt wurde. Markierung, die bei der Registrierung und Authentifizierung des Passkeys in den Authentifizierungsdaten zurückgegeben wird

<ph type="x-smartling-placeholder">
</ph> Screenshot eines Dialogfelds zur Nutzerbestätigung im iCloud-Schlüsselbund unter macOS. Im Dialogfeld wird der Nutzer aufgefordert, sich mit Touch ID anzumelden. Dabei werden der Ursprung, der die Authentifizierung anfordert, und der Nutzername angezeigt. Oben rechts im Dialogfeld befindet sich eine Schaltfläche mit der Bezeichnung „Abbrechen“. <ph type="x-smartling-placeholder">
</ph> Dialogfeld zur Nutzerbestätigung im iCloud-Schlüsselbund unter macOS.
<ph type="x-smartling-placeholder">
</ph> Screenshot eines Dialogfelds zur Nutzerbestätigung in Chrome für Android In diesem Dialogfeld wird der Nutzer aufgefordert, seine Identität per Gesichtserkennung oder Fingerabdruck zu bestätigen. Der Ursprung, der die Authentifizierung anfordert, wird angezeigt. Links unten befindet sich eine Option zur Bestätigung mit einer PIN. <ph type="x-smartling-placeholder">
</ph> Dialogfeld zur Nutzerbestätigung in Android Chrome.

Validierung von UP und UV auf dem Server

Die booleschen Flags für die Nutzerpräsenz (User Presence, UP) und die vom Nutzer verifizierte (UV) werden dem Server im Datenfeld des Authenticator signalisiert. Während der Authentifizierung kann der Inhalt des Authenticator-Datenfelds validiert werden, indem die Signatur mit dem gespeicherten öffentlichen Schlüssel verifiziert wird. Solange die Signatur gültig ist, kann der Server die Flags als echt betrachten.

<ph type="x-smartling-placeholder">
</ph> Darstellung der Datenstruktur für die Authentifizierung. Von links nach rechts wird in jedem Abschnitt der Datenstruktur „RP ID HASH“ angezeigt. (32 Byte), &quot;FLAGS&quot; (1 Byte), &#39;COUNTER&#39; (4 Bytes, Big-Endian uint32), &#39;ATTESTE CRED. DATA&#39; (mit variabler Länge, falls vorhanden) und &quot;EXTENSIONS&quot; (variable Länge, falls vorhanden (CBOR)). Die „FLAGGEN“ wird erweitert, um eine Liste potenzieller Flags anzuzeigen, die von links nach rechts beschriftet sind: &quot;ED&quot;, &quot;AT&quot;, &quot;0&quot;, &quot;BS&quot;, &quot;BE&quot;, &quot;UV&quot;, &quot;0&quot; und &quot;UP&quot;. <ph type="x-smartling-placeholder">
</ph> Authenticator-Datenfelder in Anmeldedaten mit öffentlichem Schlüssel.

Bei der Passkey-Registrierung und ‐Authentifizierung 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 eine Nutzerbestätigung mit einem userVerification-Parameter sowohl für die Erstellung von Anmeldedaten als auch für die Assertion anfordern. Sie akzeptiert 'preferred', 'required' und 'discouraged'. Das 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 für die Antwort enthalten den UV-Wert true, wenn die Überprüfung des Nutzers durchgeführt wurde, und false, wenn dies nicht der Fall ist.
  • 'required': Es muss eine auf dem Gerät verfügbare Bestätigungsmethode für Nutzer aufgerufen werden. Ist keiner verfügbar, schlägt die Anfrage lokal fehl. Das bedeutet, dass die Anmeldedaten der Antwort immer mit dem UV-Flag zurückgegeben werden, das auf true gesetzt ist.
  • 'discouraged': Von der Verwendung einer Bestätigungsmethode für Nutzer wird abgeraten. Je nach Gerät kann die Nutzerbestätigung jedoch trotzdem durchgeführt werden und die UV-Markierung kann true oder false enthalten.

Beispielcode für das 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 Authentifizierung mit Passkeys:

const publicKeyCredentialRequestOptions = {
  challenge: /* Omitted challenge data... */,
  rpId: 'example.com',
  userVerification: 'preferred'
};

const credential = await navigator.credentials.get({
  publicKey: publicKeyCredentialRequestOptions
});

Welche Option solltest du 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 die Nutzerfreundlichkeit Vorrang vor dem Schutz hat.

Es gibt Umgebungen, in denen die Bestätigung von Nutzern schwieriger ist als der Schutz. Auf macOS-Geräten, auf denen Touch ID nicht verfügbar ist (weil das Gerät diese Funktion nicht unterstützt, es deaktiviert ist oder sich das Gerät im Clamshell-Modus befindet), wird der Nutzer aufgefordert, stattdessen sein Systempasswort einzugeben. Das führt zu Problemen und der Nutzer kann die Authentifizierung ganz abbrechen. Wenn es für Sie wichtiger ist, den Prozess möglichst reibungslos zu gestalten, verwenden Sie userVerification='preferred'.

<ph type="x-smartling-placeholder">
</ph> Screenshot eines Passkey-Dialogfelds unter macOS, der angezeigt wird, wenn Touch ID nicht verfügbar ist. Das Dialogfeld enthält Informationen wie den Ursprung, der die Authentifizierung anfordert, sowie den Nutzernamen. Oben rechts im Dialogfeld befindet sich eine Schaltfläche mit der Bezeichnung „Abbrechen“. <ph type="x-smartling-placeholder">
</ph> Ein Passkey-Dialogfeld, das unter macOS angezeigt wird, wenn Touch ID nicht verfügbar ist.

Bei userVerification='preferred' lautet die UV-Markierung true, wenn die Nutzerbestätigung erfolgreich ausgeführt wurde, und false, wenn die Nutzerbestätigung übersprungen wird. 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 Anmeldedaten für den öffentlichen Schlüssel enthalten außerdem die UV-Markierung false.

Die UV-Markierung kann dann ein Signal für Ihre Risikoanalyse sein. Falls der Anmeldeversuch aufgrund anderer Faktoren riskant erscheint, sollten Sie dem Nutzer zusätzliche Identitätsbestätigungen vorlegen, wenn die Nutzerbestätigung nicht durchgeführt wurde.

<ph type="x-smartling-placeholder">

Verwendung von userVerification='required'

Verwende userVerification='required', wenn du denkst, dass sowohl UP als auch UV unbedingt erforderlich sind.

Ein Nachteil dieser Option besteht darin, dass die Anmeldung für den Nutzer schwieriger sein kann. 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 Nutzerbestätigung auf dem Gerät durchgeführt wird. Der Server prüft, ob das UV-Flag true ist.

Fazit

Durch die Nutzerbestätigung können Passkeys, die auf Passkeys vertrauen, die Wahrscheinlichkeit abschätzen, dass sich der Geräteeigentümer 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. Achten Sie darauf, dass der Server die UP- und UV-Markierungen auf die Authentifizierung durch Passkey-Nutzer prüft.