Rilevamento più semplice delle funzionalità WebAuthn con getClientCapabilities()

Pubblicata: 15 gennaio 2025

WebAuthn offre funzionalità uniche come l'interazione con il Bluetooth per il protocollo ibrido, la comunicazione con i fornitori di passkey e il suggerimento di passkey nella compilazione automatica. Tuttavia, client e autenticatori diversi offrono livelli diversi di supporto per le funzionalità WebAuthn. Questa disparità può portare a un'esperienza utente frammentata, in cui alcuni utenti potrebbero riscontrare errori o non essere in grado di utilizzare determinate opzioni di autenticazione. Fornendo agli sviluppatori un modo per determinare le funzionalità del client, è possibile creare flussi di autenticazione più solidi che si adattano a queste variazioni.

Il metodo PublicKeyCredential.getClientCapabilities() consente alle parti attendibili di determinare quali funzionalità WebAuthn sono supportate dal browser. Il metodo restituisce una promessa che risolve in un elenco di funzionalità supportate, consentendo agli sviluppatori di personalizzare le esperienze di autenticazione e i flussi di lavoro in base alle funzionalità specifiche del cliente.

Compatibilità

Browser Support

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

getClientCapabilities()

getClientCapabilities() è un'API WebAuthn che consente alle parti attendibili di determinare quali funzionalità sono disponibili. Per utilizzare l'API, devi chiamare PublicKeyCredential.getClientCapabilities(). La promessa restituita si risolve in un oggetto che contiene le funzionalità, ognuna delle quali indica la relativa disponibilità con true o false. Se la funzionalità è undefined, tieni presente che la sua disponibilità non è nota.

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

Il browser può creare una credenziale senza un'interfaccia utente modale in evidenza se l'utente ha già dato il consenso per la creazione.

conditionalGet

Il browser può autenticarsi mostrando le passkey all'interno della finestra di dialogo di compilazione automatica, anziché in un'interfaccia utente modale ben visibile. L'equivalente esistente è PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

Il dispositivo può utilizzare il Bluetooth in modo che il browser possa creare una credenziale e autenticarla su più dispositivi utilizzando il protocollo ibrido. In genere, questo significa che il browser può mostrare un codice QR in modo che l'utente possa scansionarlo e accedere con uno smartphone su cui è presente una credenziale.

passkeyPlatformAuthenticator

Il browser può creare una credenziale e autenticarsi tramite un authenticator della piattaforma di verifica dell'utente o un altro dispositivo che lo supporta tramite il protocollo ibrido. Equivalente a hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

Il browser può creare una credenziale e autenticarsi con essa che non corrisponde all'ID RP, a condizione che sia specificata nel file delle origini correlate.

signalAllAcceptedCredentials

Il browser può segnalare le credenziali disponibili sul server al fornitore di passkey, in modo che il fornitore possa mantenere l'elenco delle passkey coerente con il server.

signalCurrentUserDetails

Il browser può indicare al fornitore di passkey le informazioni utente, come nome utente e nome visualizzato sul server, in modo che il fornitore possa mantenere le informazioni sulle passkey coerenti con il server.

signalUnknownCredential

Il browser può segnalare una credenziale eliminata sul server al fornitore di passkey, in modo che il fornitore possa mantenere l'elenco delle passkey coerente con il server.

userVerifyingPlatformAuthenticator

Il browser può creare e autenticarsi con una credenziale su un authenticator di piattaforma. Ciò non significa che il browser supporti il protocollo ibrido. L'equivalente esistente è PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

Estensioni

Gli RP possono anche determinare le estensioni disponibili con getClientCapabilities().

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

L'identificatore ha il prefisso extension: seguito dal nome dell'estensione. Per i nomi delle estensioni, consulta gli identificatori delle estensioni WebAuthn definiti in IANA.

Scopri di più

Per scoprire di più sulle passkey, consulta Accesso senza password con passkey.