Veröffentlicht am 15. Januar 2025
WebAuthn bietet einzigartige Funktionen wie die Interaktion mit Bluetooth für das Hybridprotokoll, die Kommunikation mit Passkey-Anbietern und das Vorschlagen von Passkeys in der Autofill-Funktion. Allerdings bieten verschiedene Clients und Authentifikatoren unterschiedliche Unterstützung für WebAuthn-Funktionen. Diese Diskrepanz kann zu einer fragmentierten Nutzererfahrung führen, bei der einige Nutzer auf Fehler stoßen oder bestimmte Authentifizierungsoptionen nicht nutzen können. Entwickler können so robustere Authentifizierungsabläufe erstellen, die sich an diese Unterschiede anpassen.
Mit der PublicKeyCredential.getClientCapabilities()
-Methode können Relying Parties ermitteln, welche WebAuthn-Funktionen vom Browser unterstützt werden. Die Methode gibt ein Promise zurück, das in eine Liste der unterstützten Funktionen aufgelöst wird. So können Entwickler Authentifizierungsverfahren und ‑workflows an die spezifischen Funktionen des Clients anpassen.
Kompatibilität
getClientCapabilities()
Die getClientCapabilities()
ist eine WebAuthn API, mit der vertrauende Seiten ermitteln können, welche Funktionen verfügbar sind. Um die API zu verwenden, müssen Sie PublicKeyCredential.getClientCapabilities()
aufrufen. Das zurückgegebene Promise wird zu einem Objekt aufgelöst, das Funktionen enthält, wobei die Verfügbarkeit jeder Funktion mit true
oder false
angegeben wird. Wenn die Funktion undefined
ist, ist ihre Verfügbarkeit unbekannt.
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 auffällige modale Benutzeroberfläche erstellen, wenn der Nutzer bereits zugestimmt hat, dass Anmeldedaten erstellt werden.
conditionalGet
Der Browser kann die Authentifizierung durchführen, indem er Passkeys als Teil des Autofill-Dialogfelds anzeigt, anstatt eine auffällige modale Benutzeroberfläche zu verwenden. Das vorhandene Äquivalent ist PublicKeyCredential.isConditionalMediationAvailable()
.
hybridTransport
Das Gerät kann Bluetooth verwenden, damit der Browser einen Anmeldedatensatz erstellen und sich geräteübergreifend damit authentifizieren kann. Das bedeutet in der Regel, dass der Browser einen QR‑Code anzeigen kann, damit der Nutzer ihn scannen und sich mit einem Smartphone anmelden kann, auf dem Anmeldedaten gespeichert sind.
passkeyPlatformAuthenticator
Der Browser kann Anmeldedaten erstellen und sich damit authentifizieren. Dazu kann er einen plattformübergreifenden Authentifikator zur Nutzerbestätigung oder ein anderes Gerät verwenden, das das Hybridprotokoll unterstützt. Gleichbedeutend mit hybridTransport ||
userVerifyingPlatformAuthenticator
.
relatedOrigins
Der Browser kann Anmeldedaten erstellen und sich damit authentifizieren, die nicht mit der RP-ID übereinstimmen, sofern sie in der Datei mit den zugehörigen Ursprüngen angegeben ist.
signalAllAcceptedCredentials
Der Browser kann verfügbare Anmeldedaten auf dem Server an den Passkey-Anbieter signalisieren, damit der Passkey-Anbieter die Passkey-Liste mit dem Server synchronisieren 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 synchronisieren kann.
signalUnknownCredential
Der Browser kann ein gelöschtes Anmeldedatenpaar auf dem Server an den Passkey-Anbieter signalisieren, damit der Passkey-Anbieter die Passkey-Liste mit dem Server synchronisieren kann.
userVerifyingPlatformAuthenticator
Der Browser kann Anmeldedaten auf einem Plattformauthentifikator erstellen und sich damit authentifizieren. Das bedeutet nicht, dass der Browser das Hybridprotokoll unterstützt.
Das vorhandene Äquivalent ist PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()
.
Erweiterungen
Mit getClientCapabilities()
können RPs auch verfügbare Erweiterungen ermitteln.
if (capabilities['extension:appid'] === true) {
// appId extension is supported
}
Der Kennung wird extension:
vorangestellt, gefolgt von einem Erweiterungsnamen.
Informationen zu Erweiterungsnamen finden Sie unter WebAuthn Extension Identifiers defined at IANA.