Xamarin.Essentials: archiviazione sicura

La classe SecureStorage consente di archiviare in modo sicuro semplici coppie chiave/valore.

Operazioni preliminari

Per iniziare a usare questa API, leggere la guida introduttiva per Xamarin.Essentials assicurarsi che la libreria sia installata e configurata correttamente nei progetti.

Per accedere alla funzionalità SecureStorage, è necessaria la configurazione seguente specifica della piattaforma:

Suggerimento

Il backup automatico per le app è una funzionalità di Android 6.0 (livello API 23) e versioni successive per il backup dei dati delle app dell'utente (preferenze condivise, file nello spazio di archiviazione interno dell'app e altri file specifici). I dati vengono ripristinati quando un'app viene reinstallata o installata in un nuovo dispositivo. Ciò può influire su SecureStorage che usa preferenze condivise incluse nel backup e che non possono essere decrittografate quando viene eseguito il ripristino. Xamarin.Essentials gestisce automaticamente questo caso rimuovendo la chiave in modo che possa essere reimpostata, ma è possibile eseguire un passaggio aggiuntivo disabilitando Il backup automatico.

Abilitare o disabilitare il backup

È possibile scegliere di disabilitare il backup automatico per l'intera applicazione impostando android:allowBackup su false nel file AndroidManifest.xml. Questo approccio è consigliato solo se si prevede di ripristinare i dati in altro modo.

<manifest ... >
    ...
    <application android:allowBackup="false" ... >
        ...
    </application>
</manifest>

Backup selettivo

Il backup automatico può essere configurato per disabilitare contenuto specifico dal backup. È possibile creare un set di regole personalizzate per escludere gli elementi SecureStore dal backup.

  1. Impostare l'attributo android:fullBackupContent nel file AndroidManifest.xml:

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. Creare un nuovo file XML denominato auto_backup_rules.xml nella directory Resources/xml con l'azione di compilazione AndroidResource. Impostare quindi il contenuto seguente che include tutte le preferenze condivise ad eccezione di SecureStorage:

    <?xml version="1.0" encoding="utf-8"?>
    <full-backup-content>
        <include domain="sharedpref" path="."/>
        <exclude domain="sharedpref" path="${applicationId}.xamarinessentials.xml"/>
    </full-backup-content>
    

Uso dell'archiviazione sicura

Aggiungere un riferimento a Xamarin.Essentials nella classe :

using Xamarin.Essentials;

Per salvare un valore per una determinata chiave nell'archiviazione sicura:

try
{
  await SecureStorage.SetAsync("oauth_token", "secret-oauth-token-value");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

Per recuperare un valore dall'archiviazione sicura:

try
{
  var oauthToken = await SecureStorage.GetAsync("oauth_token");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

Nota

Se alla chiave richiesta non è associato alcun valore, GetAsync restituirà null.

Per rimuovere una chiave specifica, chiamare:

SecureStorage.Remove("oauth_token");

Per rimuovere tutte le chiavi, chiamare:

SecureStorage.RemoveAll();

Suggerimento

È possibile che venga generata un'eccezione quando si chiama GetAsync o SetAsync. Ciò può essere causato da un dispositivo che non supporta l'archiviazione sicura, la modifica delle chiavi di crittografia o il danneggiamento dei dati. È consigliabile gestirlo rimuovendo e aggiungendo nuovamente l'impostazione, se possibile.

Informazioni di implementazione specifiche della piattaforma

L'archivio chiavi Android viene usato per archiviare la chiave di crittografia usata per crittografare il valore prima di salvarlo nelle preferenze condivise con il nome di file [ID-PACCHETTO-APP].xamarinessentials. La chiave (non una chiave crittografica, ma la chiave per il valore) usata nel file delle preferenze condivise è un hash MD5 della chiave passata nelle API SecureStorage.

Livello API 23 e superiore

Nei livelli API più recenti, una chiave AES viene ottenuta dall'archivio chiavi Android e usata con la crittografia AES/GCM/NoPadding per crittografare il valore prima dell'archiviazione nel file delle preferenze condivise.

Livello API 22 e inferiore

Nei livelli API precedenti, l'archivio chiavi Android supporta solo l'archiviazione di chiavi RSA, usate con la crittografia RSA/ECB/PKCS1Padding per crittografare una chiave AES (generata in modo casuale in fase di esecuzione) e archiviarla nel file delle preferenze condivise nella chiave SecureStorageKey, se non ne è già stata generata una.

SecureStorage usa l'API Preferences e segue gli stessi criteri di persistenza dei dati descritti nella documentazione per Preferences. Se un dispositivo viene aggiornato dal livello API 22 o precedente al livello API 23 e successivi, questo tipo di crittografia continuerà a essere usata a meno che l'app non venga disinstallata oppure non venga chiamato RemoveAll.

Limiti

Questa API è progettata per l'archiviazione di piccole quantità di testo. Le prestazioni potrebbero risultare lente se si tenta di usarla per archiviare grandi quantità di testo.

API

Altri video di Xamarin sono disponibili su Channel 9 e YouTube.