Scopri come l'API WebAuthn Signal permette di eliminare le passkey e aggiornarne i metadati (user.name, user.displayName) sugli autenticatori lato client in modo semplice.
Vincent
Created: August 8, 2025
Updated: August 16, 2025
Passkeys Series: WebAuthn Advanced
See the original blog version in English here.
Our mission is to make the Internet a safer place, and the new login standard passkeys provides a superior solution to achieve that. That's why we want to help you understand passkeys and its characteristics better.
L'ecosistema delle passkey è in continua evoluzione. Per facilitare questo cambiamento, lo standard WebAuthn sottostante si evolve rapidamente. Le nuove funzionalità nascono spesso da una spiegazione tecnica su GitHub e poi, dopo un'adeguata discussione, si trasformano in una pull request per lo standard. Di recente, questa pull request è stata aggiunta alla bozza dello standard come API WebAuthn Signal. In questo articolo, vedremo:
Al momento dell'aggiornamento di questo post, a gennaio 2025, l'API WebAuthn Signal è abilitata di default a partire da Chrome 132 ed era precedentemente nota come Reporting API, prima di essere rinominata per evitare conflitti con un'altra API con lo stesso nome.
Recent Articles
📝
Come creare un Issuer di credenziali digitali (Guida per sviluppatori)
📝
Come creare un Verifier di credenziali digitali (Guida per sviluppatori)
📖
Chiave Residente WebAuthn: Credenziali Individuabili come Passkey
🔑
Accesso con badge fisico e passkey: guida tecnica
🔑
Rendere obbligatoria la MFA e passare alle Passkey: Best Practice
L'API WebAuthn Signal risponde a casi d'uso specifici legati alla gestione delle passkey lato client. In particolare, aiuta a mantenere sincronizzate le informazioni tra la Relying Party (RP) e gli autenticatori che fanno parte dei sistemi operativi lato client. Esistono i seguenti importanti casi d'uso:
Quando viene creata una passkey, questa include diverse informazioni: user.id
,
user.name
e user.displayName
. La passkey stessa è identificata tramite il
Credential ID univoco.
user.id
è fondamentale perché viene utilizzato per l'effettiva corrispondenza
tra la passkey e l'account dell'utente.L'illustrazione seguente mostra una tipica e semplice struttura di database che spiega quali informazioni verrebbero solitamente memorizzate in ciascun campo:
È importante capire che, sebbene user.name
(spesso un indirizzo email) e
user.displayName
(un nome più amichevole e leggibile) aiutino l'utente a identificare il
proprio account nell'interfaccia di selezione, la vera associazione tra una passkey e un
account è mantenuta tramite user.id
e il
Credential ID:
user.id
.Un problema sorge quando user.name
, che può essere un indirizzo email, cambia.
Attualmente, non esiste un meccanismo per aggiornare questa modifica direttamente sull'
autenticatore lato client. user.name
può cambiare per vari
motivi, ad esempio quando un utente aggiorna il proprio indirizzo email. Nonostante questa
modifica nei metadati dell'account lato server, il vecchio user.name
continuerà ad
apparire nell'interfaccia di selezione delle credenziali, il che può creare confusione per
gli utenti.
La soluzione alternativa a questo problema è creare una nuova passkey con user.name
aggiornato e lo stesso user.id
, per poi sovrascrivere la passkey esistente. Tuttavia,
questo approccio è scomodo per diverse ragioni:
user.id
può avere una sola passkey per ogni ID di
Relying Party, il che significa che la vecchia passkey deve
essere sostituita con una nuova, un passaggio in più.Indirizzi email, numeri di telefono e altri identificatori possono cambiare regolarmente.
Senza un metodo diretto per aggiornare user.name
e user.displayName
sull'autenticatore, gli utenti potrebbero riscontrare un problema persistente in cui
vedono e devono selezionare una passkey associata al loro vecchio indirizzo email. Questa
situazione compromette l'esperienza fluida che le passkey mirano a fornire. L'API WebAuthn
Signal si propone di risolvere questo problema consentendo alle Relying Party di segnalare
aggiornamenti ai metadati delle passkey senza richiedere la creazione di nuove. Prima di
spiegare come implementare l'API Signal, esploreremo il secondo importante caso d'uso che
affronta.
Un altro caso d'uso fondamentale è l'eliminazione delle passkey sull'autenticatore lato client. Con il tempo, gli utenti possono revocare le credenziali tramite l'elenco di gestione delle passkey o eliminare i propri account, e diventa necessario assicurarsi che queste credenziali vengano rimosse dall'autenticatore lato client per evitare che appaiano nelle future interfacce di selezione delle credenziali (UI condizionale / compilazione automatica delle passkey).
La necessità di questa funzionalità si presenta in diversi scenari:
Dal punto di vista dell'utente, è difficile capire che un'eliminazione nelle impostazioni del proprio account, in una finestra di dialogo come quella sopra, non comporti la rimozione della passkey su questo client.
Senza un metodo diretto per eliminare le passkey lato client, queste credenziali obsolete o non valide continuano a ingombrare l'interfaccia di selezione, generando confusione. Gli utenti potrebbero vedere e tentare di utilizzare passkey non più valide, con conseguenti tentativi di autenticazione falliti e una scarsa esperienza utente.
L'implementazione dell'API WebAuthn Signal comporta diversi passaggi e considerazioni per garantire che la funzionalità sia integrata in modo corretto e sicuro. L'API Signal consente alle Relying Party (RP) di aggiornare o eliminare le credenziali passkey sull'autenticatore lato client. Questa sezione delinea le considerazioni e i passaggi chiave per l'implementazione.
Nell'implementare l'API WebAuthn Signal, è fondamentale tenere a mente le seguenti considerazioni:
Tutela della privacy: l'API WebAuthn Signal è progettata per tutelare la privacy dell'utente, uno dei pilastri di WebAuthn. Ciò significa che non viene fornito alcun feedback alla RP sull'avvenuta elaborazione della modifica richiesta. L'API opera silenziosamente per prevenire qualsiasi potenziale fuga di informazioni sullo stato delle credenziali.
Disponibilità dell'autenticatore: l'efficacia dell'API WebAuthn Signal dipende dalla disponibilità dell'autenticatore. Ciò include sia la disponibilità fisica (ad es. la presenza di una chiave di sicurezza) sia il supporto software (ad es. la compatibilità del browser e del sistema operativo). Il browser può eseguire azioni solo se l'autenticatore è accessibile e supporta le operazioni necessarie senza richiedere l'autenticazione biometrica.
Restrizioni di dominio: l'API garantisce che solo la Relying Party associata a un dominio specifico possa richiedere modifiche alle credenziali relative a quel dominio. Si tratta di una misura di sicurezza per prevenire modifiche non autorizzate da parte di terzi.
Credential ID come chiave: quando si fa riferimento alle passkey, il Credential ID è la chiave primaria utilizzata dall'API WebAuthn Signal. Questo ID identifica in modo univoco la passkey sull'autenticatore lato client. L'API consente alle RP di modificare i metadati associati alle passkey o di segnalare che a determinate passkey non si dovrebbe più accedere, ma solo tramite il Credential ID. Nel caso in cui un autenticatore non conosca un Credential ID specifico, lo ignorerà silenziosamente.
Queste considerazioni sono essenziali per comprendere gli aspetti più importanti del corretto funzionamento dell'API WebAuthn Signal.
L'API WebAuthn Signal fornisce un meccanismo semplificato per le Relying Party (RP) per aggiornare i metadati associati alle passkey sugli autenticatori lato client. Ciò è particolarmente importante per garantire che gli utenti vedano informazioni accurate e aggiornate nell'interfaccia di selezione delle credenziali senza dover creare inutilmente nuove passkey. Ecco come l'API lo rende possibile:
Aggiornamento dei metadati con signalCurrentUserDetails(options)
Il metodo signalCurrentUserDetails(options)
nell'API Signal è specificamente progettato
per l'aggiornamento dei metadati delle passkey. Questo metodo consente alle RP di fornire
i valori correnti per user.name
e user.displayName
.
Ecco come funziona il processo (vedi anche lo standard WebAuthn Level 3).
signalCurrentUserDetails(options)
include
rp.id
, user.id
e i valori aggiornati per user.name
e user.displayName
.PublicKeyCredential.signalCurrentUserDetails({ rpId: "example.com", userId: "aabbcc", // user handle, base64url. name: "New user name", displayName: "New display name", });
Aggiornamento dei metadati locali: cerca le credenziali disponibili localmente
(sull'autenticatore) che corrispondono a rpId
e userId
. Per tutte le credenziali
corrispondenti, l'autenticatore aggiornerà name
e displayName
della credenziale.
Tutela della privacy: il processo è progettato per tutelare la privacy. L'API Signal non fornisce feedback alla RP sull'avvenuto aggiornamento, prevenendo qualsiasi fuga di informazioni sullo stato delle credenziali.
Coerenza tra i dispositivi: eseguendo regolarmente i metodi
signalCurrentUserDetails(options)
, le RP possono garantire che i metadati delle
passkey rimangano coerenti tra i diversi dispositivi e piattaforme in cui l'utente può
autenticarsi. Questo approccio riduce le possibilità che vengano visualizzate
informazioni obsolete o errate nell'interfaccia di selezione delle credenziali.
Nello screenshot qui sopra, si può vedere come Google Chrome segnali un aggiornamento di questo tipo all'utente. L'API WebAuthn Signal è parte di Chrome 130 e può essere testata con Google Password Manager su desktop se il flag delle funzionalità web sperimentali è attivato.
L'API WebAuthn Signal fornisce meccanismi per le Relying Party (RP) per segnalare
l'eliminazione delle passkey dagli autenticatori lato client.
Ciò è essenziale per garantire che le credenziali obsolete o non valide non compaiano
nell'interfaccia di selezione delle credenziali, mantenendo così un'esperienza utente
snella e sicura. Esistono due metodi per eliminare le passkey localmente:
signalUnknownCredential(options)
e signalAllAcceptedCredentials(options)
. Il primo può
essere utilizzato in situazioni in cui l'utente non è autenticato, mentre il secondo può
essere utilizzato quando l'utente è autenticato. Pertanto, per motivi di privacy,
quest'ultimo dovrebbe essere preferito.
Ecco come funzionano i due metodi:
signalUnknownCredential(options)
include rpId
(ID della Relying Party) e credentialId
(l'identificatore univoco della credenziale
da eliminare).PublicKeyCredential.signalUnknownCredential({ rpId: "example.com", credentialId: "aabbcc", // credential id the user just tried, base64url });
Chiamata del metodo: le RP chiamano questo metodo ogni volta che rilevano che una credenziale dovrebbe essere eliminata. Ciò potrebbe avvenire immediatamente dopo un tentativo di autenticazione con una credenziale non valida, durante l'eliminazione dell'account o quando un utente revoca una credenziale tramite le impostazioni dell'account.
Gestione del metodo: quando viene chiamato il metodo
signalUnknownCredential(options)
, l'autenticatore lato client cerca di trovare le
credenziali che corrispondono a rpId
e credentialID
specificati per l'omissione. A
seconda delle capacità dell'autenticatore, la credenziale
viene rimossa o viene impiegata una procedura specifica dell'autenticatore per
nascondere la credenziale nelle future cerimonie di
autenticazione.
signalAllAcceptedCredentials(options)
include
rpId
(ID della Relying Party), userId
e un elenco di Credential ID validi
allAcceptedCredentialIds
(elenco di identificatori univoci delle credenziali che
dovrebbero essere conservate).PublicKeyCredential.signalAllAcceptedCredentials({ rpId: "example.com", userId: "aabbcc", // user handle, base64url. allAcceptedCredentialIds: ["bb"], });
Chiamata del metodo: le RP chiamano questo metodo ogni volta che rilevano che una
credenziale dovrebbe essere eliminata e segnalano un elenco di credenziali valide.
Questo metodo dovrebbe essere preferito a signalUnknownCredential(options)
per
eliminare le credenziali.
Gestione del metodo: quando viene chiamato il metodo
signalAllAcceptedCredentials(options)
, l'autenticatore lato client confronta rpId
e
userId
. L'autenticatore cerca tutte le credenziali locali che corrispondono a rpId
e userId
. Il risultato viene confrontato con allAcceptedCredentialIds
. Se ci sono
credenziali locali che non sono in allAcceptedCredentialIds
, queste credenziali
vengono rimosse localmente (o nascoste a seconda dell'autenticatore).
Rendere nuovamente visibili le credenziali: se una credenziale è stata solo
nascosta (a seconda dell'autenticatore) e ora fa parte di allAcceptedCredentialIds
,
allora sarà di nuovo presente nelle future cerimonie di autenticazione.
Consigli utili:
signalAllAcceptedCredentials(options)
, è importante notare che
gli autenticatori potrebbero non essere sempre connessi al momento dell'esecuzione
di questo metodo. Di conseguenza, le Relying Party potrebbero considerare di
eseguire signalAllAcceptedCredentials(options)
periodicamente, ad esempio a ogni
accesso, per garantire che tutte le credenziali siano aggiornate.allAcceptedCredentialIds
). Le credenziali non incluse in questo
elenco potrebbero essere nascoste o rimosse dall'autenticatore, potenzialmente in
modo irreversibile. Per evitare che credenziali valide vengano omesse per errore, è
fondamentale assicurarsi che l'elenco sia completo. Se un ID di credenziale valido
viene accidentalmente tralasciato, dovrebbe essere aggiunto nuovamente a
signalAllAcceptedCredentials(options)
il prima possibile per renderlo di nuovo
visibile, supponendo che l'autenticatore lo supporti.Nello screenshot qui sopra, si può vedere come Google Chrome segnali le eliminazioni. L'API WebAuthn Signal fa parte di Chrome 132 e può essere testata con Google Password Manager su desktop.
Per implementare efficacemente l'API WebAuthn Signal e garantire una sincronizzazione fluida dei metadati delle passkey tra gli autenticatori lato client, considerate le seguenti raccomandazioni:
signalAllAcceptedCredentials(options)
dopo ogni login
andato a buon fine: questo approccio garantisce che tutti i metadati e gli ID delle
credenziali vengano aggiornati con un unico metodo, semplificando il processo e
mantenendo la coerenza tra dispositivi e piattaforme, disattivando al contempo le
credenziali eliminate o obsolete.signalUnknownCredential(options)
per
implementazioni su larga scala: considerate l'uso della messaggistica in tempo reale
con il metodo signalUnknownCredential(options)
in implementazioni
su larga scala o quando è necessario
un aggiornamento immediato. Questo metodo può migliorare l'efficienza e l'accuratezza
della gestione delle credenziali, garantendo che le credenziali non valide o obsolete
vengano prontamente rimosse dall'interfaccia di selezione.Seguendo queste raccomandazioni, potrete implementare efficacemente l'API WebAuthn Signal una volta che sarà supportata, assicurando che i metadati delle passkey rimangano aggiornati e coerenti su tutti gli autenticatori lato client, fornendo così un'esperienza utente fluida e sicura per le passkey.
Lo standard WebAuthn è in continua evoluzione e si arricchisce di funzionalità mese dopo mese. L'introduzione dell'API WebAuthn Signal è un passo avanti significativo nella gestione dei metadati e delle eliminazioni delle passkey sugli autenticatori lato client. Questa API risponde ai casi d'uso cruciali di mantenere le informazioni sincronizzate tra le Relying Party (RP) e gli autenticatori, e di garantire che le passkey non valide o obsolete vengano rimosse, migliorando così l'esperienza utente.
user.name
e user.displayName
obsolete, che possono
creare confusione quando le credenziali vengono presentate nell'interfaccia di
selezione. Inoltre, aiuta a mantenere un'interfaccia di selezione delle credenziali
pulita e sicura rimuovendo le passkey revocate o eliminate.Man mano che lo standard WebAuthn si evolve, beneficia dei diversi interessi dei suoi partecipanti, che spingono avanti diverse parti dello standard. Tenere d'occhio questi sviluppi è fondamentale per rimanere aggiornati con le ultime migliorie e per garantire che le implementazioni rimangano allineate con le più recenti best practice e standard. La community di WebAuthn continua a promuovere l'innovazione, rendendo l'autenticazione più sicura e facile da usare.
Passkeys Series: WebAuthn Advanced
Related Articles
Table of Contents