Einfachere Erkennung von WebAuthn-Funktionen mit getClientCapabilities()

Veröffentlicht: 15. Januar 2025

WebAuthn bietet einzigartige Funktionen wie die Interaktion mit Bluetooth für das Hybridprotokoll, die Kommunikation mit Passkey-Anbietern und die Vorschläge von Passkeys bei der Autofill-Funktion. Unterschiedliche Clients und Authenticator bieten jedoch unterschiedliche Unterstützung für WebAuthn-Funktionen. Diese Unterschiede können zu einer fragmentierten Nutzererfahrung führen, bei der einige Nutzer Fehler sehen oder bestimmte Authentifizierungsoptionen nicht nutzen können. Wenn Entwickler die Möglichkeit haben, die Clientfunktionen zu ermitteln, können sie robustere Authentifizierungsabläufe erstellen, die sich an diese Unterschiede anpassen.

Mit der PublicKeyCredential.getClientCapabilities()-Methode können vertrauende Seiten ermitteln, welche WebAuthn-Funktionen vom Browser unterstützt werden. Die Methode gibt ein Versprechen zurück, das in eine Liste der unterstützten Funktionen aufgelöst wird. So können Entwickler die Authentifizierung und Workflows an die spezifischen Funktionen des Clients anpassen.

Kompatibilität

Browser Support

  • Chrome: not supported.
  • Edge: not supported.
  • Firefox: not supported.
  • Safari: 17.4.

getClientCapabilities()

Die getClientCapabilities() ist eine WebAuthn-API, mit der vertrauende Seiten ermitteln können, welche Funktionen verfügbar sind. Wenn Sie die API verwenden möchten, müssen Sie PublicKeyCredential.getClientCapabilities() aufrufen. Das zurückgegebene Versprechen wird in ein Objekt aufgelöst, das Funktionen enthält, deren Verfügbarkeit jeweils mit true oder false angegeben ist. Wenn die Funktion undefined ist, ist ihre Verfügbarkeit nicht bekannt.

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

Der Browser kann Anmeldedaten ohne eine gut sichtbare modale Benutzeroberfläche erstellen, wenn der Nutzer bereits seine Einwilligung zum Erstellen gegeben hat.

conditionalGet

Der Browser kann Passkeys als Teil des Autofill-Dialogfelds statt in einer deutlich sichtbaren modalen Benutzeroberfläche anzeigen, um die Authentifizierung durchzuführen. Vorhandenes Äquivalent ist PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

Das Gerät kann Bluetooth verwenden, damit der Browser Anmeldedaten erstellen und sich damit über das Hybridprotokoll geräteübergreifend authentifizieren kann. Das bedeutet in der Regel, dass der Browser einen QR-Code anzeigen kann, den der Nutzer scannen und sich mit einem Smartphone anmelden kann, auf dem Anmeldedaten gespeichert sind.

passkeyPlatformAuthenticator

Der Browser kann Anmeldedaten erstellen und sich damit über einen Plattform-Authenticator oder ein anderes Gerät, das die Authentifizierung über das Hybridprotokoll unterstützt, authentifizieren. Gleichbedeutend mit hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

Der Browser kann Anmeldedaten erstellen und sich damit authentifizieren, die nicht mit der RP-ID übereinstimmen, solange sie in der zugehörigen Datei mit Ursprungsangaben angegeben sind.

signalAllAcceptedCredentials

Der Browser kann dem Passkey-Anbieter verfügbare Anmeldedaten auf dem Server signalisieren, damit der Passkey-Anbieter die Passkey-Liste mit dem Server abgleichen kann.

signalCurrentUserDetails

Der Browser kann Nutzerinformationen wie Nutzername und Anzeigename auf dem Server an den Passkey-Anbieter senden, damit der Passkey-Anbieter seine Passkey-Informationen mit dem Server abgleichen kann.

signalUnknownCredential

Der Browser kann dem Passkey-Anbieter mitteilen, dass Anmeldedaten auf dem Server gelöscht wurden, damit der Passkey-Anbieter die Passkey-Liste mit dem Server abgleichen kann.

userVerifyingPlatformAuthenticator

Der Browser kann Anmeldedaten auf einem Plattform-Authenticator erstellen und sich damit authentifizieren. Das bedeutet nicht, dass der Browser das Hybridprotokoll unterstützt. Das vorhandene Äquivalent ist PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

extensions

RPs können auch mit getClientCapabilities() verfügbare Erweiterungen ermitteln.

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

Die Kennung beginnt mit extension:, gefolgt von einem Erweiterungsnamen. Informationen zu Erweiterungsnamen finden Sie in den bei der IANA definierten WebAuthn-Erweiterungs-IDs.

Weitere Informationen

Weitere Informationen zu Passkeys finden Sie unter Passwortlose Anmeldung mit Passkeys.