Ripristinare le credenziali delle app durante la configurazione di un nuovo dispositivo

La funzionalità Ripristina credenziali di Credential Manager consente agli utenti di ripristinare i propri account app durante la configurazione di un nuovo dispositivo. Questa API è in anteprima per gli sviluppatori e disponibile su tutti i dispositivi con Android 9 o versioni successive e Google Play Services (GMS) Core versione 242200000 o successive. I vantaggi della funzionalità Ripristina credenziali includono:

  • Esperienza utente perfetta: gli utenti possono ripristinare l'account dell'app senza dover accedere manualmente a ogni singola app.
  • Maggiore coinvolgimento degli utenti: gli utenti hanno maggiori probabilità di continuare a utilizzare la tua app se possono ripristinare il proprio account durante la configurazione di un nuovo dispositivo.
  • Sforzo di sviluppo ridotto: la funzionalità Ripristina credenziali è integrata con Credential Manager, quindi gli sviluppatori che già supportano le passkey possono aggiungere funzionalità di ripristino delle credenziali.

Come funziona

Puoi utilizzare Restore Credentials per creare, ottenere e cancellare le credenziali pertinenti.

  1. Crea la credenziale di ripristino: quando l'utente accede alla tua app, crea una credenziale di ripristino associata al suo account. Questa credenziale viene archiviata localmente e sincronizzata con il cloud se l'utente ha attivato il backup Google e la crittografia end-to-end è disponibile (le app possono disattivare la sincronizzazione con il cloud).
  2. Ottieni la credenziale di ripristino: quando l'utente configura un nuovo dispositivo, la tua app può richiedere la credenziale di ripristino a Gestione credenziali. In questo modo puoi far accedere automaticamente l'utente senza richiedere ulteriori input.
  3. Cancella la credenziale di ripristino: quando l'utente esce dalla tua app, devi eliminare la credenziale di ripristino associata.

La funzionalità Ripristina credenziali può integrarsi facilmente con i sistemi di backend che hanno già implementato le passkey. Questa compatibilità deriva dal fatto che sia le passkey sia le chiavi di ripristino (tipo di credenziali utilizzato dalla funzionalità Ripristina credenziali) rispettano le stesse specifiche tecniche di base. Questo allineamento garantisce che la procedura di ripristino delle credenziali possa recuperare e reintegrare in modo efficace le credenziali utente memorizzate nei sistemi abilitati alle passkey, fornendo un'esperienza coerente e intuitiva su diverse piattaforme e metodi di autenticazione.

Riquadro inferiore di Gestore delle credenziali
Figura 1. Diagramma che mostra il ripristino dei dati di un'app su un nuovo dispositivo utilizzando una credenziale di ripristino, inclusa la creazione della credenziale, l'avvio di un flusso di ripristino e l'accesso automatico dell'utente

Implementazione

L'API Restore Credentials è disponibile tramite la libreria Jetpack di Gestione credenziali. Per iniziare, procedi nel seguente modo:

  1. Aggiungi la dipendenza Credential Manager al tuo progetto.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. Crea un oggetto CreateRestoreCredentialRequest.

  3. Chiama il metodo createCredential() sull'oggetto CredentialManager.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    Questa credenziale di ripristino generata è un tipo di credenziale WebAuthn ed è nota come chiave di ripristino.

  4. Quando l'utente configura un nuovo dispositivo, chiama il metodo getCredential() sull'oggetto CredentialManager.

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. Quando l'utente esce dalla tua app, chiama il metodo clearCredentialState() sull'oggetto CredentialManager.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

Se utilizzi un agente di backup, esegui la parte getCredential all'interno del callback onRestore. In questo modo, le credenziali dell'app vengono ripristinate immediatamente dopo il ripristino dei dati dell'app.

Domande frequenti

D1. Qual è la differenza tra una chiave di ripristino e una passkey?

Una chiave di ripristino funziona in modo simile a una passkey, ma è progettata specificamente per il ripristino dell'account su nuovi dispositivi. Quando utilizzi un gestore delle password come Gestore delle password di Google per l'autenticazione, vengono visualizzate le passkey e le password utilizzabili, mentre la chiave di ripristino non viene visualizzata, in quanto non è destinata agli accessi regolari.

D2. La chiave di ripristino è una credenziale monouso?

No, una chiave di ripristino non è una credenziale monouso. Credential Manager è senza stato e non è a conoscenza dell'attività dell'utente, pertanto non può eliminare automaticamente la chiave dopo l'uso.

Le chiavi di ripristino vengono rimosse solo nelle seguenti situazioni:

  • Azioni a livello di sistema: gli utenti disinstallano l'app o cancellano i relativi dati.
  • Chiamate a livello di app: elimini la chiave in modo programmatico chiamando CredentialManager#clearCredentialState() quando gestisci la disconnessione dell'utente nel codice della tua app.

D3. La funzionalità Ripristina credenziali funziona solo per un nuovo dispositivo?

Sì, questa funzionalità è progettata per la configurazione iniziale di un nuovo dispositivo Android, in quanto è collegata direttamente alla funzionalità di backup e ripristino del sistema.

D4. Posso utilizzare Ripristina credenziali per accedere automaticamente a qualsiasi dispositivo su cui è stato eseguito l'accesso con lo stesso Account Google?

No, la funzionalità Ripristina credenziali non è pensata per essere utilizzata per l'accesso generale su più dispositivi. Funziona solo in uno scenario specifico: quando un utente configura un nuovo dispositivo ripristinando un backup dal vecchio dispositivo. Entrambi i dispositivi devono essere collegati allo stesso Account Google per il corretto completamento di questo processo di ripristino una tantum.

D5. La mia organizzazione ha un'app principale e più app secondarie. È possibile ripristinare la chiave per tutte queste app?

No. Una chiave di ripristino è associata al nome del pacchetto univoco di un'applicazione. Poiché l'app principale e ogni app secondaria hanno nomi di pacchetto diversi, devi creare una chiave di ripristino separata per ogni app.

D6. È necessaria una passkey per creare una chiave di recupero per l'account di un utente?

No, non è necessaria una passkey. La possibilità di creare una chiave di ripristino è indipendente dal metodo di accesso dell'utente. Il suo scopo è salvare lo stato di autenticazione corrente dell'utente. Finché l'utente è connesso attivamente alla tua app, puoi generare una chiave di ripristino per lui.

D7. L'utente può eliminare la chiave di ripristino?

No, l'utente non ha il controllo diretto sulla chiave di ripristino. La logica dell'app è responsabile della gestione delle chiavi di ripristino.

Per motivi di sicurezza, ti consigliamo di eliminare automaticamente la chiave ogni volta che un utente esegue la disconnessione. In questo modo, la volta successiva che apriranno l'app sullo stesso dispositivo, l'accesso verrà eseguito correttamente e verrà chiesto di accedere di nuovo.

D8. Posso utilizzare Restore Credentials senza impostare allowBackup su true nel mio manifest?

Sì, la funzionalità Ripristina credenziali funziona indipendentemente dal fatto che allowBackup sia impostato su true o meno.

D9. Come funziona Ripristina credenziali per gli utenti che hanno più account con accesso eseguito nella stessa app?

La funzionalità Ripristina credenziali è progettata per funzionare con un solo account alla volta.