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

Data di pubblicazione: 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 nel riempimento automatico. Tuttavia, diversi client e autenticatori 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. Fornire agli sviluppatori un modo per determinare le funzionalità del client consente loro di creare flussi di autenticazione più solidi che si adattano a queste variazioni.

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

Compatibilità

Browser Support

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

Source

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 funzionalità, ognuna delle quali indica la propria disponibilità con true o false. Se la funzionalità è undefined, considera 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à acconsentito alla creazione.

conditionalGet

Il browser può eseguire l'autenticazione visualizzando le passkey come parte della finestra di dialogo di compilazione automatica, anziché 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 autenticarsi con questa su più dispositivi utilizzando il protocollo ibrido. In genere significa che il browser può visualizzare 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 ed eseguire l'autenticazione con questa tramite un autenticatore 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, purché sia specificata nel file delle origini correlate.

signalAllAcceptedCredentials

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

signalCurrentUserDetails

Il browser può segnalare informazioni utente come nome utente e nome visualizzato sul server al fornitore di passkey, in modo che quest'ultimo possa mantenere le informazioni della passkey coerenti con il server.

signalUnknownCredential

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

userVerifyingPlatformAuthenticator

Il browser può creare ed eseguire l'autenticazione con una credenziale su un autenticatore della piattaforma. Ciò non significa che il browser supporti il protocollo ibrido. L'equivalente esistente è PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

estensioni

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

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

L'identificatore è preceduto da extension: seguito dal nome di un'estensione. Per i nomi delle estensioni, consulta gli identificatori delle estensioni WebAuthn definiti presso IANA.

Scopri di più

Per saperne di più sulle passkey, inizia da Accesso senza password con le passkey.