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 Authentifizierungsabläufe an die spezifischen Funktionen des Clients anpassen.

Kompatibilität

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

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 Promise 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 sich authentifizieren, indem Passkeys als Teil des Autofill-Dialogfelds anstelle einer deutlich sichtbaren modalen Benutzeroberfläche angezeigt werden. Das vorhandene Äquivalent ist PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

Das Gerät kann Bluetooth verwenden, damit der Browser einen Anmeldedatensatz 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 dies ü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 Anmeldung ohne Passwort mit Passkeys.