---
url: 'https://www.corbado.com/it/blog/webauthn-resident-key-discoverable-credentials-passkeys'
title: 'Chiave Residente WebAuthn: Credenziali Individuabili come Passkey'
description: '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.'
lang: 'it'
author: 'Vincent Delitz'
date: '2025-08-20T15:38:48.512Z'
lastModified: '2026-09-16T06:05:45.070Z'
keywords: 'chiave residente, credenziale individuabile, chiave non residente, credenziale non individuabile'
category: 'WebAuthn Know-How'
---

# Chiave Residente WebAuthn: Credenziali Individuabili come Passkey

## 1. Introduzione

Le [passkey](https://www.corbado.com/category/passkeys-strategy) e il protocollo sottostante WebAuthn stanno
rivoluzionando il panorama
dell'[autenticazione](https://www.corbado.com/it/blog/test-password-manager-terze-parti-per-passkey-app-native).
Tuttavia, configurare correttamente un
[server WebAuthn](https://www.corbado.com/it/blog/implementazione-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.

## 2. L'ecosistema WebAuthn

WebAuthn opera con tre entità principali:

- **Relying Party (RP):** È il vostro servizio web che desidera autenticare un utente.
  Invia delle "sfide" (challenge) al client, verifica le risposte e gestisce la chiave
  pubblica di una passkey.
- **Autenticatori:** Sono i dispositivi che possono dimostrare il possesso di una
  credenziale. Esempi includono smartphone, laptop o chiavi di
  [sicurezza](https://www.corbado.com/it/faq/exchange-criptovalute-passkey) (ad es. YubiKeys). Gli autenticatori
  possono essere specifici della piattaforma (come
  [Windows Hello](https://www.corbado.com/glossary/windows-hello) o Touch ID / [Face ID](https://www.corbado.com/faq/is-face-id-passkey)
  di Apple) o multipiattaforma (come le chiavi di
  [sicurezza](https://www.corbado.com/it/faq/exchange-criptovalute-passkey), ad es. YubiKeys).
- **Client:** Tipicamente, si tratta di browser web o
  [app native](https://www.corbado.com/it/blog/webauthn-relying-party-id-rpid-passkey) che agiscono da
  intermediari tra la RP e l'autenticatore. Facilitano la comunicazione, assicurando che i
  dati fluiscano in modo corretto e sicuro.

Di seguito, descriviamo il flusso di dati generale durante un processo di
[autenticazione](https://www.corbado.com/it/blog/test-password-manager-terze-parti-per-passkey-app-native) (sia
login che registrazione).

1. **Inizio dal client:** Il processo inizia lato client, solitamente quando un utente
   tenta di accedere o registrarsi. Ad esempio, potrebbe cliccare su un pulsante "Accedi
   con WebAuthn" e il client invia una richiesta di sfida alla RP.
2. **Richiesta della RP:** La RP invia quindi una sfida al client. Questa sfida è un
   valore generato casualmente che garantisce l'autenticità della risposta successiva.
3. **Dal client all'autenticatore:** Durante la registrazione, il client chiede
   all'autenticatore di creare una nuova passkey generando la coppia di chiavi
   pubblica-privata corrispondente. Durante il login, il client chiede all'autenticatore
   di firmare la sfida. Questo avviene utilizzando la chiave privata sull'autenticatore,
   che corrisponde a una chiave pubblica precedentemente registrata e memorizzata sulla
   RP.
4. **Risposta dell'autenticatore:** Durante la registrazione, l'autenticatore invia la
   chiave pubblica al client. Durante il login, l'autenticatore firma la sfida e invia
   questa asserzione firmata al client.
5. **Dal client alla RP:** Il client inoltra questa nuova chiave pubblica / l'asserzione
   firmata alla RP.
6. **Verifica della RP:** La RP memorizza la chiave pubblica / verifica l'asserzione
   firmata utilizzando la chiave pubblica memorizzata. Se è valida,
   l'[autenticazione](https://www.corbado.com/it/blog/test-password-manager-terze-parti-per-passkey-app-native)
   ha successo.

## 3. Approfondimento sulle passkey

Il 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.

- **ID della credenziale (Credential ID):** L'ID della credenziale è un identificatore
  univoco assegnato a una specifica credenziale di chiave pubblica generata da un
  autenticatore. Permette alle [Relying Party](https://www.corbado.com/glossary/relying-party) (RP) di
  identificare e selezionare la PublicKeyCredential corretta per i processi di
  autenticazione.
- **PublicKeyCredential:** È la struttura dati principale restituita dall'API WebAuthn del
  browser o delle [app native](https://www.corbado.com/it/blog/webauthn-relying-party-id-rpid-passkey). Comprende
  sia i dati di [attestazione](https://www.corbado.com/it/glossary/attestation) durante la registrazione sia i
  dati di asserzione durante il login. In sostanza, contiene i dati di cui la RP ha
  bisogno per verificare il processo.
- **Attestazione:** L'[attestazione](https://www.corbado.com/it/glossary/attestation) nel contesto WebAuthn serve
  come prova dell'origine e dell'integrità dell'autenticatore. Durante la registrazione, è
  un modo per l'autenticatore di dire: "Ho registrato in modo sicuro la credenziale
  dell'utente, ed ecco una dichiarazione che puoi usare per verificarlo". La
  [Relying Party](https://www.corbado.com/glossary/relying-party) può quindi verificare che la firma provenga da
  un autenticatore specifico consentito (ad es. [Yubikey](https://www.corbado.com/glossary/yubikey)). Non tutti
  gli autenticatori di passkey rispondono con tale
  [attestazione](https://www.corbado.com/it/glossary/attestation), alcuni semplicemente non inviano dati utili
  (vedi
  [qui](https://github.com/passkeydeveloper/passkey-authenticator-aaguids/blob/main/aaguid.json)
  l'elenco degli autenticatori di passkey). Ulteriori [AAGUID](https://www.corbado.com/glossary/aaguid)
  (Authenticator [Attestation](https://www.corbado.com/glossary/attestation) GUID) che identificano altri
  autenticatori (principalmente chiavi di
  [sicurezza](https://www.corbado.com/it/faq/exchange-criptovalute-passkey), ad es. YubiKeys) possono essere
  trovati nel [FIDO Alliance Metadata Service](https://fidoalliance.org/metadata/).
- **Asserzione:** Dopo il processo di registrazione, quando un utente cerca di accedere,
  l'autenticatore produce un'asserzione. L'asserzione è fondamentalmente la
  PublicKeyCredential + la sfida firmata. Questa asserzione dimostra che l'utente possiede
  la chiave privata legata alla chiave pubblica registrata, senza rivelare la chiave
  privata stessa. È il modo in cui l'autenticatore dice: "Questo è l'utente autentico e
  posso garantirlo".

## 4. Cosa sono le chiavi residenti e le chiavi non residenti?

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.

### 4.1 Chiavi residenti (RK)

**Definizione:**

Le chiavi residenti sono salvate direttamente sull'autenticatore stesso. Potrebbe
trattarsi di una chiave di sicurezza (es. [YubiKey](https://www.corbado.com/glossary/yubikey)), di un enclave
sicuro della piattaforma (es. [Secure Enclave](https://www.corbado.com/glossary/secure-enclave) dell'iPhone) o di
un trusted platform module (TPM) su un laptop.
L'[UI condizionale (completamento automatico delle passkey)](#conditional-ui-passkey-autofill)
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](https://www.corbado.com/glossary/relying-party) (rpID) in questione e mostrare un
> elenco di possibili / memorizzati [user handle](https://www.corbado.com/blog/webauthn-user-id-userhandle) (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](https://www.corbado.com/glossary/yubikey). Le
chiavi non residenti non sono nell'elenco, poiché non sono memorizzate sull'autenticatore:

![Yubikey Manager Resident Keys](https://www.corbado.com/website-assets/6517dbcd905582d132f08cc2_yubikey_manager_fido_discoverable_credentials_3f3f110283.png)

**Flusso di login:**

![WebAuthn Resident key flow](https://www.corbado.com/website-assets/65170ca733125d4a5908b0c2_webauthn_resident_key_flow_bd5ddbfb26.png)_Fonte:
[William Brown](https://fy.blackhats.net.au/blog/2023-02-02-how-hype-will-turn-your-security-key-into-junk/)_

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:**

1. **Esperienza Utente Semplificata:** Uno dei vantaggi più significativi delle chiavi
   residenti è che l'autenticatore memorizza lo
   [user handle](https://www.corbado.com/blog/webauthn-user-id-userhandle) (es. email, numero di telefono, nome
   utente) e può quindi precompilarlo per il login. Gli utenti non devono ricordare o
   inserire gli [user handle](https://www.corbado.com/blog/webauthn-user-id-userhandle), semplificando il
   processo di accesso, specialmente su dispositivi con capacità biometriche. Questo può
   avvenire anche automaticamente con l'UI condizionale.
2. **Autenticazione specifica del dispositivo:** Le chiavi residenti possono fornire un
   ulteriore livello di sicurezza legando l'autenticazione a un dispositivo specifico.
   Questo può essere particolarmente utile per i servizi che vogliono assicurarsi che gli
   utenti accedano da dispositivi affidabili.
3. **UI condizionale (Completamento automatico delle passkey):** L'UI condizionale
   funziona solo con chiavi residenti, offrendo l'esperienza di login più fluida (vedi
   [sotto](#conditional-ui-passkey-autofill) per i dettagli).

**Svantaggi:**

1. **Limiti di archiviazione:** Alcuni autenticatori hanno una capacità di archiviazione
   finita. Specialmente per le chiavi di sicurezza (es. YubiKeys), c'è spesso un limite al
   numero di chiavi residenti che possono memorizzare (la maggior parte ha un limite che
   va da 8 a circa 100 chiavi residenti). Una volta raggiunto questo limite, potrebbe
   essere necessario eliminare le chiavi più vecchie per fare spazio a quelle nuove,
   oppure l'utente potrebbe dover utilizzare un altro autenticatore.
2. **Perdita dell'autenticatore:** Se l'autenticatore, ad esempio una chiave di sicurezza
   (es. YubiKey) o uno smartphone, viene perso o danneggiato, tutte le chiavi residenti su
   quel dispositivo andranno perse. Ciò potrebbe bloccare l'accesso degli utenti a più
   servizi fino a quando non si registrano nuovamente o recuperano i loro account. La
   sincronizzazione delle chiavi tramite un account cloud (es.
   [Portachiavi iCloud](https://www.corbado.com/it/faq/passkey-trasferimento-nuovo-iphone),
   [Google Password Manager](https://www.corbado.com/blog/how-to-use-google-password-manager)) o un moderno
   [gestore di password](https://www.corbado.com/it/blog/provider-passkey) (es.
   [1Password](https://www.corbado.com/blog/1password-passkeys-best-practices-analysis) o
   [Dashlane](https://www.corbado.com/blog/dashlane-passkeys)) previene questa perdita.
3. **Preoccupazioni di sicurezza:** Se un autenticatore con chiavi residenti viene rubato,
   un aggressore potrebbe tentare di estrarre le chiavi. Sebbene gli autenticatori moderni
   dispongano di robusti meccanismi di sicurezza per prevenire l'estrazione, ad esempio
   l'utente protegge il dispositivo con un PIN, un passcode o un gesto forte, il rischio,
   seppur minimo, esiste ancora.

**Casi d'uso:** Ideale per dispositivi in cui l'utente si autentica frequentemente, come
smartphone o laptop personali.

### 4.2 Chiavi non residenti (NRK)

**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:**

![WebAuthn Non-resident key flow](https://www.corbado.com/website-assets/65170dade63f226249823f7d_webauthn_non_resident_key_flow_09fc4da6c1.png)_Fonte:
[William Brown](https://fy.blackhats.net.au/blog/2023-02-02-how-hype-will-turn-your-security-key-into-junk/)_

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:**

1. **Scalabilità:** Poiché le chiavi non residenti non risiedono sull'autenticatore, gli
   utenti possono avere un numero quasi illimitato di chiavi non residenti associate a
   vari servizi. Ciò è particolarmente vantaggioso per gli utenti che hanno account su
   numerose piattaforme.
2. **Capacità di roaming:** Le chiavi non residenti sono ideali per autenticatori mobili
   come le chiavi di sicurezza (ad es. YubiKey). Un utente può utilizzare la stessa chiave
   di sicurezza (es. YubiKey) per autenticarsi su più dispositivi e piattaforme, offrendo
   un'esperienza coerente.
3. **Minore dipendenza dalla memoria dell'autenticatore:** Con le giuste impostazioni del
   [server WebAuthn](https://www.corbado.com/it/blog/implementazione-server-webauthn), non c'è bisogno di
   preoccuparsi dei limiti di archiviazione dell'autenticatore. Questo può essere
   particolarmente vantaggioso per autenticatori con poca memoria, come le chiavi di
   sicurezza (es. YubiKeys).

**Svantaggi:**

1. **UX inferiore a causa della richiesta dello User Handle:** Lo svantaggio più grande
   delle chiavi non residenti è che lo user handle (es. email, numero di telefono, nome
   utente) deve essere fornito dall'utente, il che rende impossibile la precompilazione
   del nome utente tramite UI condizionale. Questo user handle deve essere legato all'ID
   della credenziale, necessario per calcolare la
   [chiave avvolta dalla chiave effimera](https://github.com/w3c/webauthn/issues/1612#issuecomment-840961012).
2. **Potenziale di cattiva gestione:** Le RP devono gestire e proteggere le associazioni
   tra account utente e chiavi pubbliche. Una cattiva gestione o vulnerabilità potrebbero
   portare a problemi di sicurezza.

**Casi d'uso:** Ideale per autenticatori mobili come le chiavi di sicurezza (es. YubiKeys)
che vengono utilizzate su più servizi o piattaforme.

### 4.3 Esempio

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](https://www.corbado.com/it/blog/app-native-passkey). 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.

## 5. UI Condizionale ("Completamento automatico delle passkey")

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.

## 6. Client to Authenticator Protocol (CTAP)

[CTAP](https://www.corbado.com/it/glossary/ctap) è un protocollo fondamentale dello standard
[FIDO2](https://www.corbado.com/glossary/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](https://www.corbado.com/it/glossary/ctap), diamo prima una breve occhiata alle
diverse versioni del protocollo prima di analizzare l'impatto sulle chiavi residenti e non
residenti.

### 6.1 CTAP1 (U2F)

La versione precedente, spesso definita Universal 2nd Factor (U2F), era progettata
principalmente per l'[autenticazione a due fattori](https://www.corbado.com/it/faq/cosa-sono-le-passkey). 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.

### 6.2 CTAP2

Successore di U2F, CTAP2 ha introdotto il supporto per le chiavi residenti, consentendo
l'[autenticazione senza password](https://www.corbado.com/it/glossary/ctap) 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).

### 6.3 CTAP2.1

CTAP2.1 è una versione successiva di CTAP2, che introduce funzionalità e miglioramenti
aggiuntivi al protocollo. Alcuni punti chiave di [CTAP](https://www.corbado.com/it/glossary/ctap) 2.1 includono:

- **Migliore gestione delle chiavi residenti:** CTAP 2.1 consente di gestire, aggiornare
  ed eliminare individualmente specifiche chiavi residenti dal proprio dispositivo.
- **Attestazione aziendale:** Questa funzione consente alle aziende di avere un maggiore
  controllo sulle chiavi utilizzate dai loro dipendenti. Fornisce un modo per le aziende
  di verificare che le chiavi utilizzate siano quelle emesse dall'azienda.
- **Riconoscimento di più utenti:** Alcuni autenticatori possono riconoscere più utenti.
  CTAP 2.1 fornisce un modo per questi autenticatori di indicare quale utente è stato
  riconosciuto.
- **Compatibilità con le versioni precedenti:** CTAP 2.1 è progettato per essere
  retrocompatibile con CTAP2, garantendo che i dispositivi e le piattaforme che supportano
  la versione precedente possano ancora funzionare con la nuova.

## 7. Opzioni del server WebAuthn

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](https://www.corbado.com/glossary/authenticatorselection). Questo oggetto
[guida](https://www.corbado.com/it/blog/passkeys-cheat-sheet) il client nella selezione dell'autenticatore giusto
per il compito.

```json
{
    "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
    }
}
```

### 7.1 Opzione del server WebAuthn: Authenticator Attachment

Questa opzione del server specifica come l'autenticatore è collegato al dispositivo
client. Fornisce indicazioni su come l'autenticatore comunica con il client:

**Valori possibili**

- **Platform:** Indica che l'autenticatore è collegato alla piattaforma del client e
  quindi non è rimovibile.
- **Cross-platform:** Indica che l'autenticatore non è legato alla piattaforma del client
  e può essere utilizzato su più dispositivi.

**Casi d'uso ed esempi**

- **Platform:** Esempi includono uno scanner di impronte digitali integrato in un laptop o
  un sistema di riconoscimento facciale su un telefono, come
  [Face ID](https://www.corbado.com/faq/is-face-id-passkey), Touch ID o [Windows Hello](https://www.corbado.com/glossary/windows-hello).
- **Cross-platform:** Esempi includono chiavi di sicurezza USB (es. YubiKeys), dispositivi
  Bluetooth o schede NFC.

### 7.2 Opzione del server WebAuthn: Resident Key

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](https://developers.yubico.com/WebAuthn/Concepts/WebAuthn_Level_2_Features_and_Enhancements.html)
ha sostituito questa opzione del server con la nuova opzione residentKey:

**Valori possibili**

- **Required:** L'autenticatore deve creare una chiave residente (se non è possibile,
  l'operazione dovrebbe fallire).
- **Preferred:** L'autenticatore dovrebbe tentare di creare una chiave residente (se non è
  possibile, dovrebbe creare una chiave non residente).
- **Discouraged:** L'autenticatore deve creare una chiave non residente (se non è
  possibile, l'operazione dovrebbe fallire).

**Casi d'uso ed esempi**

- **Required:** Ideale per scenari in cui si desidera l'accesso senza nome utente o in cui
  gli utenti dovrebbero autenticarsi solo da dispositivi precedentemente registrati
  (aggiungendo un ulteriore livello di sicurezza legando la credenziale dell'utente a un
  dispositivo specifico).
- **Preferred:** Adatto per scenari in cui il servizio web desidera fornire la migliore UX
  di login possibile (tramite chiavi residenti), ma vuole comunque supportare le chiavi
  non residenti se quelle residenti non sono possibili.
- **Discouraged:** Un servizio vuole offrire l'autenticazione con passkey e vuole anche
  garantire che gli utenti possano utilizzare qualsiasi autenticatore, anche quelli senza
  capacità di archiviazione, senza legare la credenziale a un dispositivo specifico.

### 7.3 Opzione del server WebAuthn: User Verification

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**

- **Required:** L'operazione deve avere la verifica dell'utente.
- **Preferred:** L'operazione dovrebbe avere la verifica dell'utente se possibile, ma può
  procedere senza.
- **Discouraged:** L'operazione non dovrebbe avere la verifica dell'utente.

**Casi d'uso ed esempi**

- **Required:** Ideale per applicazioni ad alta sicurezza come il
  [banking](https://www.corbado.com/passkeys-for-banking) o la [sanità](https://www.corbado.com/passkeys-for-healthcare), dove la
  verifica dell'identità dell'utente (ad es. tramite impronta digitale o PIN) è cruciale.
- **Preferred:** Utile per applicazioni generali in cui una maggiore sicurezza è un
  vantaggio ma non strettamente necessaria.
- **Discouraged:** Adatto per operazioni a basso rischio o scenari in cui la verifica
  dell'utente potrebbe essere un inconveniente.

### 7.4 Pattern comuni delle opzioni del server WebAuthn

#### 7.4.1 Login senza password con passkey tramite Face ID / Touch ID

**Pattern**

- [Authenticator](https://www.corbado.com/glossary/authenticator) attachment: platform
- [Resident key](https://www.corbado.com/blog/webauthn-resident-key-discoverable-credentials-passkeys): required
- [User verification](https://www.corbado.com/blog/webauthn-user-verification): required

**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.

#### 7.4.2 Login senza password con chiavi di sicurezza

**Pattern**

- [Authenticator](https://www.corbado.com/glossary/authenticator) attachment: cross-platform
- [Resident key](https://www.corbado.com/blog/webauthn-resident-key-discoverable-credentials-passkeys): required
- [User verification](https://www.corbado.com/blog/webauthn-user-verification): required

**Esempio:** Un utente registra una chiave di sicurezza (es. YubiKey) per il suo online
[banking](https://www.corbado.com/passkeys-for-banking). Può utilizzare questa chiave per autenticarsi su
qualsiasi dispositivo fornendo la chiave di sicurezza (es. YubiKey), senza bisogno di
inserire un nome utente.

## 8. Sfide e soluzioni potenziali

### 8.1 Sfida 1: Limiti di archiviazione delle chiavi di sicurezza

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:**

- **Uso selettivo delle chiavi residenti:** Invece di utilizzare chiavi residenti per ogni
  utente, considerale per ruoli o scenari specifici. Ad esempio, dai la priorità alle
  chiavi residenti per i ruoli di amministratore o gli utenti con privilegi elevati che
  richiedono una maggiore sicurezza.
- **Educazione dell'utente:** Informa gli utenti sui limiti delle loro chiavi di sicurezza
  (es. YubiKeys). Incoraggiali a passare a dispositivi che possono utilizzare un numero
  illimitato di chiavi residenti, come laptop o smartphone.

### 8.2 Sfida 2: Comportamento incoerente tra gli autenticatori

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](https://www.corbado.com/it/blog/implementazione-server-webauthn) su diverse piattaforme è un
problema serio. Ad esempio, [iOS](https://www.corbado.com/blog/how-to-enable-passkeys-ios) creerà sempre una
chiave residente indipendentemente dalle opzioni del server WebAuthn passate, mentre
[Android](https://www.corbado.com/blog/how-to-enable-passkeys-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](https://w3c.github.io/webauthn/#sctn-authenticator-credential-properties-extension)
(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](https://www.corbado.com/blog/how-to-enable-passkeys-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](https://www.corbado.com/blog/passkeys-windows-11),
[Android](https://www.corbado.com/blog/how-to-enable-passkeys-android) 7,
[Android](https://www.corbado.com/blog/how-to-enable-passkeys-android) 13, iOS17, macOS Ventura, YubiKey) con due
pagine demo di WebAuthn che forniscono maggiori dettagli sulle credenziali create:
[https://webauthn.io](https://webauthn.io) e
[https://webauthntest.identitystandards.io/](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](https://www.corbado.com/blog/how-to-enable-passkeys-ios) ma l'UI condizionale funzionava
chiaramente).

Lo schema di verifica più affidabile
[che abbiamo trovato](https://github.com/duo-labs/webauthn.io/issues/68#issuecomment-1321086293)
è il seguente:

1. Verifica le impostazioni del tuo server WebAuthn per l'attributo "residentKey"
    1. Se "residentKey: required" e una credenziale viene creata con successo -&gt; è una
       chiave residente
    2. Se "residentKey: preferred" o "residentKey: discouraged", passa al controllo
       successivo
2. L'estensione credProps.rk è supportata e memorizzata nella credenziale sul server?
    1. Se credProps.rk = true, la credenziale è una chiave residente
    2. Se credProps.rk = false, la credenziale è una chiave non residente
    3. Se credProps è vuoto, il tipo di credenziale è sconosciuto

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](https://fy.blackhats.net.au/blog/2023-02-02-how-hype-will-turn-your-security-key-into-junk/)
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):

![WebAuthn Resident key behavior for different resident key options and platforms / authenticators](https://www.corbado.com/website-assets/6517169ef6b267c5861a1331_resident_key_table_operating_system_cc647fbf5b.png)

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:**

- **Test approfonditi:** Prima di implementare, testa la tua
  [implementazione](https://www.corbado.com/it/blog/passkeys-cheat-sheet) WebAuthn su una vasta gamma di
  autenticatori popolari per comprenderne il comportamento.
- **Impostazioni esplicite del server:** Quando configuri il tuo server WebAuthn, sii
  esplicito nei tuoi requisiti. Se vuoi avere solo passkey, imposta l'opzione residentKey
  su required (nota: questo potrebbe portare ad altre sfide con autenticatori con capacità
  limitata di chiavi residenti, vedi sopra).

### 8.3 Sfida 3: Preoccupazioni per l'esperienza utente

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:**

- **Gestione degli errori elegante:** Implementa messaggi di errore chiari che informino
  l'utente quando la sua chiave di sicurezza (es. YubiKey) è piena e fornisci indicazioni
  su come risolvere il problema.
- **Flussi di lavoro guidati:** Offri guide passo-passo o tutorial su come gli utenti
  possono gestire le loro chiavi residenti, assicurando che possano risolvere i problemi
  in modo autonomo.

<h2 id="best-practices-developers-product-managers">
    9. Best practice per sviluppatori e product manager
</h2>

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](https://www.corbado.com/glossary/user-verification): 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](https://www.corbado.com/it/blog/passkeys-cheat-sheet) e product
manager possono garantire di implementare l'autenticazione con passkey in modo efficace,
bilanciando sicurezza ed esperienza utente.

## 10. Raccomandazione

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.

- [authenticator](https://www.corbado.com/glossary/authenticator): platform
- residentKey: required
- [userVerification](https://www.corbado.com/glossary/user-verification): required

**Vantaggi:**

- Poiché tutte le chiavi create sono residenti, la configurazione permette l'UI
  condizionale, rendendo il vostro login ancora più fluido per gli utenti, che non
  dovranno ricordare un nome utente.
- Tutti i dispositivi moderni di Apple, Google e Microsoft sono supportati e utilizzano le
  passkey.

## 11. Conclusione

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](https://bit.ly/passkeys-community)
o iscrivetevi alla nostra newsletter qui sotto.
