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.
Impostare l'attributo
android:fullBackupContent
nel file AndroidManifest.xml:<application ... android:fullBackupContent="@xml/auto_backup_rules"> </application>
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
Video correlato
Altri video di Xamarin sono disponibili su Channel 9 e YouTube.