Start · Sprachen · JavaScript · Referenz · PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()

PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()

Methode

Statische Methode, die per Promise meldet, ob ein Plattform-Authenticator mit Benutzerverifizierung (z. B. Touch ID, Windows Hello, Android-Fingerabdruck) verfügbar ist.

seit JavaScript Baseline: alle modernen Browser (Chrome 67+, Edge Kategorie: webapi

Signatur

PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()

Beschreibung

Die statische Methode PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable() gehört zur Web Authentication API (WebAuthn). Sie liefert ein Promise, das mit true erfüllt wird, wenn das Gerät einen fest eingebauten Authenticator (Plattform-Authenticator) besitzt, der den Benutzer selbst verifizieren kann – etwa per Fingerabdruck, Gesichtserkennung oder Geräte-PIN. Beispiele sind Touch ID/Face ID, Windows Hello oder die Displaysperre unter Android.

Typischer Einsatz: Vor dem Anbieten einer Passkey- oder Biometrie-Anmeldung prüft man, ob das Gerät dies überhaupt unterstützt. Nur dann zeigt man z. B. einen Button „Mit Fingerabdruck anmelden“ oder bietet nach dem Passwort-Login an, einen Passkey auf diesem Gerät einzurichten. Externe Sicherheitsschlüssel (USB/NFC, sogenannte Roaming-Authenticators) werden von dieser Methode nicht berücksichtigt.

Die Methode nimmt keine Argumente entgegen und löst keine Benutzerinteraktion aus; sie ist daher gefahrlos beim Laden der Seite aufrufbar. Ein true bedeutet allerdings nur, dass ein solcher Authenticator vorhanden und eingerichtet ist – nicht, dass für die aktuelle Website bereits Zugangsdaten existieren.

Rückgabewert

Typ
Promise<boolean>
Beschreibung
Ein Promise, das mit true erfüllt wird, wenn ein benutzerverifizierender Plattform-Authenticator verfügbar ist, andernfalls mit false.

Beispiele

Einfache Verfügbarkeitsprüfung

const pruefeBiometrie = async () => {
  if (!window.PublicKeyCredential) {
    console.log('WebAuthn wird nicht unterstützt.');
    return false;
  }
  const verfuegbar = await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();
  console.log(`Plattform-Authenticator verfügbar: ${verfuegbar}`);
  return verfuegbar;
};

pruefeBiometrie();
Plattform-Authenticator verfügbar: true

Passkey-Button nur bei Unterstützung anzeigen

const passkeyButton = document.querySelector('#passkey-login');
passkeyButton.hidden = true;

const initPasskeyUI = async () => {
  try {
    const ok = window.PublicKeyCredential &&
      await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();
    passkeyButton.hidden = !ok;
  } catch (err) {
    console.warn('Prüfung fehlgeschlagen:', err);
  }
};

document.addEventListener('DOMContentLoaded', initPasskeyUI);

Kombiniert mit Conditional UI (Autofill für Passkeys)

const ermittleFaehigkeiten = async () => {
  if (!window.PublicKeyCredential) return { plattform: false, autofill: false };

  const [plattform, autofill] = await Promise.all([
    PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable(),
    typeof PublicKeyCredential.isConditionalMediationAvailable === 'function'
      ? PublicKeyCredential.isConditionalMediationAvailable()
      : Promise.resolve(false)
  ]);

  return { plattform, autofill };
};

ermittleFaehigkeiten().then((f) => console.log(f));
{ plattform: true, autofill: true }

// Wichtig · Fallstricke

  • Sicherer Kontext erforderlich: WebAuthn ist nur über HTTPS (oder localhost) verfügbar. In unsicheren Kontexten existiert window.PublicKeyCredential nicht – vorher immer auf Existenz prüfen.
  • Nur Plattform-Authenticatoren: Externe Sicherheitsschlüssel (YubiKey etc.) und Passkeys auf einem anderen Gerät (Hybrid/QR-Code-Anmeldung) werden ignoriert. Ein false heißt also nicht, dass WebAuthn gar nicht nutzbar ist.
  • Eingerichtet ≠ vorhanden: Ist z. B. Windows Hello zwar unterstützt, aber nicht konfiguriert, kann das Ergebnis je nach Browser und Betriebssystem false sein.
  • Privatsphäre: Manche Browser (z. B. im privaten Modus oder bei aktiven Fingerprinting-Schutzmaßnahmen) können abweichende Werte liefern. Das Ergebnis sollte daher nur als Hinweis für die Benutzeroberfläche dienen, nicht als Sicherheitsentscheidung.
  • Für eine umfassendere Abfrage bieten neuere Browser PublicKeyCredential.getClientCapabilities() an (noch nicht überall verfügbar).