Configurazioni errate nelle impostazioni del server WebAuthn possono causare problemi di UX e danneggiare le passkey esistenti. Questa guida aiuta gli sviluppatori a configurare correttamente i server WebAuthn.
Vincent
Created: August 20, 2025
Updated: August 21, 2025
Passkeys Series: WebAuthn Basics
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.
Le passkey e il protocollo sottostante WebAuthn stanno rivoluzionando il panorama dell'autenticazione. Tuttavia, configurare correttamente un server WebAuthn può essere un'impresa complicata. Le configurazioni errate non solo possono introdurre vulnerabilità, ma anche danneggiare le passkey esistenti se fosse necessario modificarle in seguito. Questo articolo ha lo scopo di aiutarvi a comprendere meglio le specifiche, spesso complesse, di WebAuthn e di consigliarvi le impostazioni più adatte al vostro caso d'uso.
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
WebAuthn opera con tre entità principali:
Di seguito, descriviamo il flusso di dati generale durante un processo di autenticazione (sia login che registrazione).
Ben Gould
Head of Engineering
I’ve built hundreds of integrations in my time, including quite a few with identity providers and I’ve never been so impressed with a developer experience as I have been with Corbado.
10,000+ devs trust Corbado & make the Internet safer with passkeys. Got questions? We’ve written 150+ blog posts on passkeys.
Join Passkeys CommunityIl processo di alto livello descritto sopra riguarda le procedure di registrazione e login con WebAuthn. Le passkey sono costruite su WebAuthn. Inizialmente, il termine "passkey" era usato come un'alternativa più memorabile e meno tecnica di WebAuthn per descrivere la stessa cosa. Inoltre, le passkey offrono più funzionalità rispetto allo standard WebAuthn, come la possibilità di sincronizzare le passkey tramite account cloud o gestori di password.
Per comprendere meglio le sezioni seguenti, definiamo alcuni termini importanti del protocollo WebAuthn per avere una base comune.
Le chiavi residenti (RK) e le chiavi non residenti (NRK) sono due tipi di chiavi crittografiche utilizzate nel protocollo WebAuthn, e si differenziano principalmente per la loro posizione di archiviazione e il meccanismo di recupero.
Definizione:
Le chiavi residenti sono salvate direttamente sull'autenticatore stesso. Potrebbe trattarsi di una chiave di sicurezza (es. YubiKey), di un enclave sicuro della piattaforma (es. Secure Enclave dell'iPhone) o di un trusted platform module (TPM) su un laptop. L'UI condizionale (completamento automatico delle passkey) funziona solo per le chiavi residenti e il gruppo di lavoro WebAuthn attualmente richiede che le chiavi residenti siano considerate come passkey.
Le chiavi residenti sono spesso chiamate anche credenziali individuabili, perché il client può scoprire un elenco di possibili chiavi dall'autenticatore che corrispondono all'ID della Relying Party (rpID) in questione e mostrare un elenco di possibili / memorizzati user handle (es. email, numeri di telefono, nomi utente) del dispositivo.
Nello screenshot seguente, si vede un elenco di tutte le chiavi residenti (ID credenziale, rpID, nome utente, nome visualizzato) memorizzate su una YubiKey. Le chiavi non residenti non sono nell'elenco, poiché non sono memorizzate sull'autenticatore:
Flusso di login:
Fonte: William Brown
Durante il processo di login, la Relying Party invia una richiesta senza specificare le credenziali al client (browser), che inizia a interrogare l'autenticatore (nel grafico: chiave di sicurezza). L'autenticatore individua tutte le chiavi residenti per la Relying Party corrispondente e il client (browser) seleziona la chiave residente desiderata. Questa chiave residente viene utilizzata per firmare la sfida. La firma viene inviata dall'autenticatore tramite il client alla Relying Party.
Vantaggi:
Svantaggi:
Casi d'uso: Ideale per dispositivi in cui l'utente si autentica frequentemente, come smartphone o laptop personali.
Definizione:
Le chiavi non residenti, al contrario, non sono salvate sull'autenticatore. Invece, l'autenticatore genera una nuova coppia di chiavi (basata sulla sua chiave master protetta internamente) e invia la chiave pubblica di questa nuova coppia al server (Relying Party) insieme all'ID della credenziale (che contiene un seme) durante la registrazione. Il server associa quindi questa chiave pubblica all'account dell'utente. Per le autenticazioni successive, l'autenticatore deriva nuovamente la chiave privata ricevendo l'ID della credenziale, estraendo il seme e combinandolo con la chiave master. Poiché la chiave è disponibile solo temporaneamente nella memoria protetta dell'autenticatore, nel linguaggio crittografico viene talvolta chiamata chiave effimera.
Le chiavi non residenti sono spesso chiamate anche credenziali non individuabili, perché l'autenticatore non può scoprire/cercare chiavi per un ID specifico della Relying Party (rpID). Senza l'ID della credenziale, l'autenticatore non sa nemmeno che potrebbe esistere una chiave.
Flusso di login:
Fonte: William Brown
Durante il processo di login, la Relying Party deve prima identificare quale utente sta richiedendo l'autenticazione (ad es. chiedendo uno user handle, come email, numero di telefono o nome utente) e poi invia gli ID delle credenziali di cui è a conoscenza per l'utente richiedente al client (browser). Il client li inoltra all'autenticatore (qui: chiave di sicurezza). L'autenticatore utilizza l'ID della credenziale insieme alla chiave master dell'autenticatore per derivare la chiave privata temporanea, firma la sfida con la chiave generata e la restituisce al client (qui: browser), che la inoltra alla Relying Party. Le chiavi non residenti erano originariamente utilizzate come secondo fattore prima dell'introduzione delle passkey. Pertanto, identificare prima l'utente faceva parte del normale processo di login.
Vantaggi:
Svantaggi:
Casi d'uso: Ideale per autenticatori mobili come le chiavi di sicurezza (es. YubiKeys) che vengono utilizzate su più servizi o piattaforme.
Immagina di avere una chiave di sicurezza (es. YubiKey) e di registrarla con due servizi online: Servizio A e Servizio B. Per il Servizio A, usi una chiave residente. Per il Servizio B, una chiave non residente. Quando ti autentichi al Servizio A, tocchi semplicemente la tua chiave di sicurezza (es. YubiKey) e sei dentro, senza bisogno di specificare un nome utente. Per il Servizio B, dovrai prima fornire il tuo nome utente nel browser / app nativa. Il servizio invia quindi l'ID della credenziale associato alla tua chiave di sicurezza (es. YubiKey), che rigenera la chiave privata effimera per l'autenticazione.
In sostanza, mentre sia le chiavi residenti che quelle non residenti migliorano la sicurezza sfruttando l'autenticazione crittografica, le loro esperienze utente e i meccanismi di archiviazione differiscono, adattandosi a vari casi d'uso.
L'UI condizionale è una funzionalità fondamentale delle passkey / WebAuthn. Alleggerisce ulteriormente il carico per l'utente, che non solo non deve ricordare una password, ma non deve nemmeno ricordare lo user handle (es. email, numero di telefono, nome utente) con cui si è registrato a una Relying Party. Questo è un passo da gigante, specialmente nei casi in cui i servizi delle Relying Party vengono utilizzati solo occasionalmente.
Questo funziona perché non appena la pagina di login viene aperta, il server della Relying Party invia una sfida in background al client (ricorda che non è necessario inviare un ID credenziale in questa chiamata). Il client prende questa sfida, controlla quali passkey corrispondono all'ID della Relying Party su quell'autenticatore e offre la selezione tramite il menu di completamento automatico, dove l'utente può selezionare la passkey appropriata.
Inoltre, risparmia all'utente un clic aggiuntivo sul pulsante di login, perché non appena la passkey viene selezionata dal menu di completamento automatico, il processo di login inizia.
L'UI condizionale (completamento automatico delle passkey) funziona solo per le chiavi residenti.
CTAP è un protocollo fondamentale dello standard FIDO2, che colma il divario di comunicazione tra client (come i browser) e autenticatori (come le chiavi di sicurezza, es. YubiKeys, o gli smartphone). Per comprendere meglio CTAP, diamo prima una breve occhiata alle diverse versioni del protocollo prima di analizzare l'impatto sulle chiavi residenti e non residenti.
La versione precedente, spesso definita Universal 2nd Factor (U2F), era progettata principalmente per l'autenticazione a due fattori. In U2F, il server fornisce una sfida e l'autenticatore fornisce una risposta, dimostrando il possesso della chiave privata. Tuttavia, U2F non supporta le chiavi residenti, il che significa che richiede sempre una ricerca lato server per identificare quale chiave utilizzare per un utente, poiché questo faceva parte del processo quando si chiedeva un secondo fattore.
Successore di U2F, CTAP2 ha introdotto il supporto per le chiavi residenti, consentendo l'autenticazione senza password e senza nome utente. Con le chiavi residenti, l'autenticatore memorizza il nome utente e l'ID della credenziale (insieme all'ID della Relying Party), eliminando la necessità per il server della Relying Party di fornirlo durante l'autenticazione. Questo è un passo significativo verso una UX più fluida.
Tuttavia, CTAP2 presenta delle sfide. Un problema notevole è la gestione delle chiavi residenti. Ad esempio, la cancellazione di una specifica chiave residente in un dispositivo CTAP2.0 richiede spesso un reset completo del dispositivo (quindi anche la tua chiave master viene resettata, il che significa che tutte le tue chiavi non residenti non funzioneranno più), il che non è user-friendly e può essere problematico in scenari in cui più chiavi residenti sono memorizzate su un singolo dispositivo. Questo rende le chiavi residenti su un dispositivo CTAP2.0 un impegno serio. Non si vuole certo riempire accidentalmente quello spazio limitato che si ha spesso, specialmente sulle chiavi di sicurezza (es. YubiKeys).
CTAP2.1 è una versione successiva di CTAP2, che introduce funzionalità e miglioramenti aggiuntivi al protocollo. Alcuni punti chiave di CTAP 2.1 includono:
Dopo aver esaminato le chiavi residenti, non residenti e le diverse versioni di CTAP, analizziamo ora più a fondo il lato della Relying Party e quindi il lato del server WebAuthn.
La flessibilità (ma anche la complessità) di WebAuthn è in gran parte attribuita alle sue impostazioni del server, in particolare all'interno dell'oggetto authenticatorSelection. Questo oggetto guida il client nella selezione dell'autenticatore giusto per il compito.
{ "rp": { "name": "corbado.com", "id": "corbado.com" }, "user": { "id": "dGVzdefEyMjE", "name": "test-username", "displayName": "test-username" }, "challenge": "mhanjsapJjCNaN_Ttasdfk1C0DymR-V_w_0UVOPsdfdfJG2ON_FK5-ODtqp33443tgqHzuuDjv-NUUmMAE4hg", "pubKeyCredParams": [ { "type": "public-key", "alg": -7 }, { "type": "public-key", "alg": -257 } ], "timeout": 60000, "excludeCredentials": [], "authenticatorSelection": { "authenticatorAttachment": "platform", "residentKey": "preferred", "requireResidentKey": false, "userVerification": "preferred" }, "attestation": "none", "extensions": { "credProps": true } }
Questa opzione del server specifica come l'autenticatore è collegato al dispositivo client. Fornisce indicazioni su come l'autenticatore comunica con il client:
Valori possibili
Casi d'uso ed esempi
Nella specifica WebAuthn Level 1, questa opzione del server era chiamata requireResidentKey e poteva assumere i valori booleani true (l'autenticatore deve creare una chiave residente) o false (l'autenticatore deve creare una chiave non residente). WebAuthn Level 2 ha sostituito questa opzione del server con la nuova opzione residentKey:
Valori possibili
Casi d'uso ed esempi
La verifica dell'utente si riferisce al processo che garantisce che la persona che interagisce con l'autenticatore sia il proprietario legittimo, tipicamente richiedendo un gesto di autenticazione specifico come l'inserimento di un PIN, la fornitura di un'impronta digitale o l'uso del riconoscimento facciale.
Talvolta la presenza dell'utente (UP) è menzionata o usata in modo simile alla verifica dell'utente, ma presenta alcune differenze. La presenza dell'utente conferma solo che qualcuno — chiunque — è fisicamente presente e interagisce con il dispositivo. Non verifica l'identità di quella persona. Un semplice tocco di una chiave di sicurezza, senza ulteriori controlli di identità, può essere sufficiente per la presenza dell'utente. Per le passkey / WebAuthn, l'utente deve sempre essere presente.
Valori possibili
Casi d'uso ed esempi
Pattern
Esempio: Un'applicazione aziendale vuole che i dipendenti accedano senza password sui loro laptop aziendali utilizzando i lettori di impronte digitali integrati. La credenziale è memorizzata sul dispositivo e l'utente deve verificare con un'impronta digitale ogni volta.
Pattern
Esempio: Un utente registra una chiave di sicurezza (es. YubiKey) per il suo online banking. Può utilizzare questa chiave per autenticarsi su qualsiasi dispositivo fornendo la chiave di sicurezza (es. YubiKey), senza bisogno di inserire un nome utente.
Molte chiavi di sicurezza basate su hardware (es. YubiKeys) hanno limiti di archiviazione intrinseci. Questa limitazione è dovuta alla memoria fisica disponibile sul dispositivo e alle considerazioni di progettazione del produttore.
Esempio: Una YubiKey potrebbe avere la capacità di memorizzare solo 20 chiavi residenti. Una volta raggiunto questo limite, non è possibile aggiungere altre chiavi residenti senza eliminare quelle esistenti.
Soluzione:
Differenti autenticatori potrebbero gestire le richieste di chiavi residenti in modo diverso. Alcuni potrebbero creare di default una chiave residente anche se non esplicitamente richiesta, mentre altri potrebbero richiedere un'istruzione esplicita.
Il comportamento incoerente per le diverse opzioni del server WebAuthn su diverse piattaforme è un problema serio. Ad esempio, iOS creerà sempre una chiave residente indipendentemente dalle opzioni del server WebAuthn passate, mentre Android richiede un opt-in (ad es. con residentKey: preferred o residentKey: required).
Oltre al comportamento, è ancora peggio che, basandosi sui dati memorizzati lato server, non si possa dire con certezza al 100% se una credenziale memorizzata sia una chiave residente o non residente. Invece, si possono seguire alcuni controlli e restringere il campo (vedi sotto), ma bisogna comunque sperare che il comportamento della credenziale sia conforme a ciò che si crede.
Il motivo è che esiste una raccomandazione WebAuthn di memorizzare informazioni sul tipo di credenziale (chiave residente o non residente) nell'estensione delle proprietà della credenziale (clientExtensionResults.credProps.rk, che è true o false). Tuttavia, fornire queste informazioni alla RP non è garantito poiché tutte le estensioni WebAuthn sono opzionali, ad esempio iOS non le invia (quindi non si sa se si tratta di una chiave residente o non residente).
Durante la nostra ricerca, abbiamo cercato di testare il comportamento su diverse piattaforme e autenticatori (Windows 10, Windows 11, Android 7, Android 13, iOS17, macOS Ventura, YubiKey) con due pagine demo di WebAuthn che forniscono maggiori dettagli sulle credenziali create: https://webauthn.io e https://webauthntest.identitystandards.io/. Quest'ultima offre la possibilità di lavorare con la proprietà legacy requireResidentKey (WebAuthn Level 1) e persino di combinarla con la proprietà residentKey (WebAuthn Level 2). Tuttavia, i risultati non sono stati affidabili (ad es. indicava una chiave non residente per iOS ma l'UI condizionale funzionava chiaramente).
Lo schema di verifica più affidabile che abbiamo trovato è il seguente:
Come puoi vedere, questo aiuta a restringere il campo, ma l'opzione sconosciuta rimane e non si può determinare il tipo di chiave con il 100% di certezza.
Questo è anche in linea con le scoperte di William Brown di SUSE nel suo ottimo articolo che illustra come le chiavi di sicurezza (es. YubiKeys) potrebbero diventare inutili se le chiavi residenti sono richieste dalle Relying Party (abbiamo esteso la sua tabella):
Nella tabella, si vede per diverse opzioni di chiave residente del server WebAuthn se è stata creata una chiave residente (true), se è stata creata una chiave non residente (false) o se è successo qualcos'altro.
Soluzione:
Se un utente raggiunge il limite di archiviazione sulla sua chiave di sicurezza (es. YubiKey), potrebbe incontrare errori o non essere in grado di registrare nuove credenziali. Questo può portare a confusione e frustrazione.
Soluzione:
Come avete visto sopra, le impostazioni del server WebAuthn che scegliete possono avere un impatto significativo sull'esperienza utente e sulla sicurezza del vostro processo di autenticazione. È essenziale comprendere le sfumature di queste impostazioni per prendere decisioni informate.
Chiavi residenti vs. non residenti: Se la maggior parte dei vostri utenti accede principalmente al vostro servizio da dispositivi personali come smartphone o laptop, le chiavi residenti sono una scelta adatta. Le chiavi residenti sono memorizzate sul dispositivo stesso e offrono un'esperienza di autenticazione fluida per gli utenti che utilizzano frequentemente lo stesso dispositivo. Tuttavia, per gli utenti che utilizzano chiavi di sicurezza (es. YubiKeys), le chiavi non residenti potrebbero essere più appropriate.
Impostazioni di verifica dell'utente (UV): A seconda del livello di sicurezza che si desidera raggiungere, è possibile decidere quanto rigoroso debba essere il processo di verifica dell'utente. Se si punta a un'alta sicurezza, è consigliabile richiedere un PIN, un'impronta digitale o il riconoscimento facciale (userVerification: preferred o userVerification: required).
Attestazione e affidabilità: L'attestazione permette di verificare l'origine e l'integrità dell'autenticatore. Decidete se volete fidarvi di tutti gli autenticatori o solo di quelli di produttori specifici. Questo può essere cruciale se si trattano dati sensibili e si vuole garantire che vengano utilizzati solo autenticatori affidabili e di alta qualità.
Meccanismi di fallback: Abbiate sempre un meccanismo di fallback. Se un utente perde il proprio autenticatore o se questo non funziona, dovrebbe avere un modo alternativo per accedere al proprio account. Questo potrebbe essere tramite codici di backup, verifica via SMS, magic link via email o altri metodi di autenticazione a più fattori.
Formazione continua: Il panorama delle passkey e di WebAuthn è in continua evoluzione. Rimanete aggiornati sugli ultimi sviluppi, vulnerabilità e patch. Incoraggiate il vostro team di sviluppo a partecipare a workshop, webinar e conferenze relative a passkey e WebAuthn.
Onboarding ed educazione dell'utente: Quando si introduce l'autenticazione con passkey, assicuratevi che i vostri utenti ne comprendano i vantaggi e il funzionamento. Offrite istruzioni chiare durante il processo di registrazione e fornite risorse (come FAQ o video tutorial) per assistere gli utenti nella configurazione e nell'uso delle passkey.
Aderendo a queste best practice, sviluppatori e product manager possono garantire di implementare l'autenticazione con passkey in modo efficace, bilanciando sicurezza ed esperienza utente.
Se volete implementare le passkey per un'adozione di massa nel vostro sito web o app e non avete bisogno di supportare le chiavi di sicurezza (es. YubiKeys), poiché la maggior parte dei vostri utenti utilizzerà semplicemente il proprio smartphone o laptop, raccomandiamo le seguenti impostazioni.
Vantaggi:
Le impostazioni del server WebAuthn, sebbene complesse, offrono un framework robusto e flessibile per l'autenticazione. Padroneggiare queste impostazioni è cruciale, poiché non si tratta solo di implementare un nuovo standard, ma di migliorare fondamentalmente la sicurezza e l'efficienza dell'autenticazione utente.
In sostanza, comprendere le impostazioni del server WebAuthn è un investimento nella creazione di applicazioni più sicure, efficienti e proiettate al futuro. Con l'evolversi del panorama digitale, essere esperti in tali tecnologie sarà indispensabile. Per rimanere aggiornati, unitevi alla nostra community di passkey o iscrivetevi alla nostra newsletter qui sotto.
Passkeys Series: WebAuthn Basics
Related Articles
Table of Contents