Aiutare gli utenti ad adottare le passkey in modo più semplice

Data di pubblicazione: 9 maggio 2025

Le passkey offrono un'autenticazione efficace e a prova di phishing. Tuttavia, convincere gli utenti ad adottarli può creare attrito. Con la creazione automatica delle passkey puoi creare passkey per i tuoi utenti al momento giusto, a condizione che abbiano già una password salvata per il tuo sito. La creazione condizionale, che consente la creazione automatica di passkey, fa parte della specifica WebAuthn.

Come funziona

Per aiutare gli utenti ad adottare le passkey in modo più pratico, utilizza una funzionalità dell'API WebAuthn chiamata Conditional Create. Conditional Create consente al tuo sito di richiedere una passkey per l'utente senza richiedere alcuna azione da parte sua.

Questo flusso funziona quando sono soddisfatte le seguenti condizioni:

  • L'utente ha una password salvata nel gestore delle password predefinito.
  • La password è stata utilizzata di recente. Idealmente, chiama Conditional Create subito dopo un accesso basato su password riuscito.

Se entrambe le condizioni sono soddisfatte, puoi richiedere al gestore delle password di creare una passkey per l'utente chiamando Conditional Create. Una volta creata la passkey, l'utente riceve una notifica a seconda del gestore delle password.

Flusso di richiesta della passkey con creazione condizionale.

Compatibilità

La creazione condizionale è supportata da Safari su macOS e da tutti i browser su iOS, nonché da Chrome su computer e Chrome su Android.

Implementare la creazione condizionale

La creazione automatica delle passkey si basa su una funzionalità dell'API WebAuthn chiamata Conditional Create. Si tratta di normali richieste WebAuthn create() con il parametro mediation impostato su "conditional", che funziona in modo simile al riempimento automatico delle passkey per le richieste get().

Utilizza Conditional Create dopo che l'utente ha eseguito l'accesso con una password. La creazione ha esito positivo a seconda del gestore delle password e di determinate condizioni soddisfatte. Queste condizioni possono variare in base al gestore delle password e potrebbero cambiare nel tempo. Ad esempio, in Chrome con Gestore delle password di Google (GPM), l'utente deve aver eseguito l'accesso di recente utilizzando una password salvata per il sito.

Se il browser crea correttamente la passkey, restituisce una credenziale di chiave pubblica. Invia queste credenziali al tuo backend per completare la registrazione e attivare l'autenticazione futura.

Rilevamento delle funzionalità

Puoi determinare se Conditional Create è disponibile nel browser richiamando PublicKeyCredential.getClientCapabilities(). Verifica se un oggetto restituito contiene true per la proprietà conditionalCreate.

if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
  const capabilities = await PublicKeyCredential.getClientCapabilities();
  if (capabilities.conditionalCreate) {
    // Conditional create is available
  }
}

Se getClientCapabilities non è disponibile, anche la creazione condizionale non è disponibile.

Creare una passkey in modo condizionale

Per eseguire la creazione automatica della passkey, richiama navigator.credentials.create() ma con mediation: "conditional".

const cred = await navigator.credentials.create({
  publicKey: options,
  // Request conditional creation
  mediation: 'conditional'
});

Devi utilizzare la creazione automatica delle passkey subito dopo l'accesso dell'utente per avere le migliori possibilità di soddisfare i criteri del Gestore delle password per la creazione automatica.

Puoi inviare la credenziale della chiave pubblica risultante al server per verificare e registrare la passkey. Sul server, assicurati che l'utente abbia eseguito l'accesso.

Avvertenze

L'implementazione di Conditional Create di per sé non è difficile, ma ci sono diverse avvertenze quando si integra questa funzionalità in un sistema esistente.

Ignorare la presenza e la verifica dell'utente sul server

La risposta alla registrazione restituisce sia "Presenza utente" che "Utente verificato" come false, quindi il server deve ignorare questi flag durante la verifica delle credenziali.

Interrompere la chiamata WebAuthn in corso prima di eseguire una creazione automatica della passkey

Quando il relying party si aspetta che l'utente acceda con una passkey o una password, l'esecuzione di un'operazione GET condizionale è la scelta migliore. Ciò potrebbe causare l'annullamento della chiamata condizionale GET prima di eseguire una creazione condizionale.

Per farlo, devi utilizzare AbortController e chiamare .abort().

// To abort a WebAuthn call, instantiate an AbortController.
const controller = new AbortController();

const cred = await navigator.credentials.get({
  publicKey: options,
  signal: controller.signal,
  // Request conditional get
  mediation: 'conditional'
});

// Abort the call
controller.abort();

Ignorare le eccezioni in modo controllato

Quando viene eseguita la creazione condizionale di una passkey, ci sono alcuni casi in cui devi ignorare le eccezioni:

  • InvalidStateError: esiste già una passkey nel provider di passkey (non dimenticare di specificare excludeCredentials).
  • NotAllowedError: la creazione di una passkey non soddisfa la condizione.
  • AbortError: La chiamata WebAuthn viene interrotta.

La visualizzazione di errori in questi casi può confondere l'utente, poiché il browser li gestisce in modo invisibile: mostra una notifica solo in caso di esito positivo e gli errori non attivano messaggi visibili.

Segnale quando la registrazione di una passkey non riesce

Quando una passkey viene creata ma non registrata sul server, l'utente non riuscirà ad accedere. Ciò può accadere quando l'elenco delle passkey non è coerente tra il fornitore di passkey e il server.

Per evitare queste circostanze, utilizza l'API Signal per mantenerli coerenti.

L'upgrade dagli accessi senza password non è supportato

A questo punto, la creazione condizionale di una passkey è limitata all'inserimento di una password valida da parte dell'utente. Ciò significa che gli approcci di accesso senza password, come i link magici, la verifica del numero di telefono o la federazione delle identità, non soddisfano la condizione.

Riepilogo

La creazione automatica delle passkey può accelerare l'adozione delle passkey sul tuo sito web, aiutando gli utenti del tuo sito web a passare dalle password a un metodo di autenticazione più sicuro.

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