Archiviazione sicura
Questo articolo descrive come usare l'interfaccia dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI). ISecureStorage
Questa interfaccia consente di archiviare in modo sicuro coppie chiave/valore semplici.
L'implementazione predefinita dell'interfaccia ISecureStorage
è disponibile tramite la SecureStorage.Default
proprietà . Sia l'interfaccia che SecureStorage
la ISecureStorage
classe sono contenute nello spazio dei Microsoft.Maui.Storage
nomi .
Operazioni preliminari
Per accedere alla SecureStorage funzionalità, è necessaria la configurazione specifica della piattaforma seguente:
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 le preferenze di condivisione di cui è stato eseguito il backup e non può essere decrittografato quando si verifica il ripristino. .NET MAUI gestisce automaticamente questo caso rimuovendo la chiave in modo che possa essere reimpostata. In alternativa, è possibile disabilitare il backup automatico.
Abilitare o disabilitare il backup
È possibile scegliere di disabilitare il backup automatico per l'intera applicazione impostando su android:allowBackup
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 Platforms/Android/Resources/xml con l'azione di compilazione di AndroidResource. Impostare 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}.microsoft.maui.essentials.preferences.xml"/> </full-backup-content>
Usare l'archiviazione sicura
Gli esempi di codice seguenti illustrano come usare l'archiviazione sicura.
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.
Scrivere un valore
Per salvare un valore per una determinata chiave nell'archiviazione sicura:
await SecureStorage.Default.SetAsync("oauth_token", "secret-oauth-token-value");
Leggere un valore
Per recuperare un valore dall'archiviazione sicura:
string oauthToken = await SecureStorage.Default.GetAsync("oauth_token");
if (oauthToken == null)
{
// No value is associated with the key "oauth_token"
}
Suggerimento
Se non esiste un valore associato alla chiave, GetAsync
restituisce null
.
Rimuovere un valore
Per rimuovere un valore specifico, rimuovere la chiave:
bool success = SecureStorage.Default.Remove("oauth_token");
Per rimuovere tutti i valori, usare il RemoveAll
metodo :
SecureStorage.Default.RemoveAll();
Differenze tra le piattaforme
Questa sezione descrive le differenze specifiche della piattaforma con l'API di archiviazione sicura.
SecureStorage
usa l'API Preferenze e segue la stessa persistenza dei dati descritta nella documentazione preferenze , con un nome file [ YOUR-APP-PACKAGE-ID].microsoft.maui.essentials.preferences. Tuttavia, i dati vengono crittografati con la classe Android EncryptedSharedPreferences
, dalla libreria Di sicurezza Android, che esegue il wrapping della SharedPreferences
classe e crittografa automaticamente chiavi e valori usando un approccio a due schemi:
- Le chiavi vengono crittografate in modo deterministico, in modo che la chiave possa essere crittografata e cercata correttamente.
- I valori non sono crittografati in modo deterministico tramite AES-256 GCM.
Per altre informazioni sulla libreria di sicurezza Di Android, vedere Usare i dati in modo più sicuro in developer.android.com.
Limiti
Le prestazioni possono essere influenzate se si archivia una grande quantità di testo, perché l'API è stata progettata per archiviare piccole quantità di testo.