Sécuriser le stockage
Dans cet article, vous allez apprendre à utiliser l’interface ISecureStorage
de l’application multiplateforme .NET (.NET MAUI). Cette interface permet de stocker en toute sécurité des paires clé-valeur simples.
L’implémentation par défaut de l’interface ISecureStorage
est disponible via la propriété SecureStorage.Default
. L’espace de noms Microsoft.Maui.Storage
contient à la fois l’interface ISecureStorage
et la classe SecureStorage
.
Démarrage
Pour accéder à la fonctionnalité SecureStorage, la configuration suivante spécifique à la plateforme est requise.
La sauvegarde automatique pour les applications est une fonctionnalité d’Android 6.0 (niveau d’API 23) et des versions ultérieures qui sauvegarde les données d’application de l’utilisateur (préférences partagées, fichiers situés dans le stockage interne de l’application et autres fichiers spécifiques). Les données sont restaurées lorsqu’une application est réinstallée ou installée sur un nouvel appareil. Ceci peut avoir une incidence sur SecureStorage
, qui utilise les préférences de partage sauvegardées et non déchiffrables lors de la restauration. .NET MAUI gère automatiquement ce cas en supprimant la clé afin qu’elle puisse être réinitialisée. Vous pouvez également désactiver la sauvegarde automatique.
Activer ou désactiver la sauvegarde
Vous pouvez choisir de désactiver la sauvegarde automatique pour la totalité de votre application en définissant le paramètre android:allowBackup
sur false dans le fichier AndroidManifest.xml. Cette approche n’est recommandée que si vous envisagez de restaurer les données d’une autre façon.
<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>
Sauvegarde sélective
Il est possible de configurer la sauvegarde automatique de façon à ce que la sauvegarde de certains contenus soit désactivée. Vous pouvez créer un ensemble de règles personnalisées pour exclure les éléments SecureStore
de la sauvegarde.
Définissez l’attribut
android:fullBackupContent
dans AndroidManifest.xml :<application ... android:fullBackupContent="@xml/auto_backup_rules"> </application>
Créez un fichier XML nommé auto_backup_rules.xml dans le répertoire Platforms/Android/Resources/xml à l’aide de l’action de génération d’AndroidResource. Définissez le contenu suivant, qui comporte toutes les préférences partagées à l’exception de
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>
Utiliser un stockage sécurisé
Les exemples de code suivants illustrent comment utiliser un stockage sécurisé.
Conseil
Il est possible qu’une exception soit levée lors de l’appel à GetAsync
ou SetAsync
. Cela peut être dû à un appareil qui ne prend pas en charge le stockage sécurisé, la modification des clés de chiffrement ou l’altération des données. Il est préférable de gérer cela en supprimant et en rétablissant le paramètre si possible.
Écrire une valeur
Pour enregistrer une valeur de clé donnée dans SecureStorage :
await SecureStorage.Default.SetAsync("oauth_token", "secret-oauth-token-value");
Lire une valeur
Pour récupérer une valeur de SecureStorage :
string oauthToken = await SecureStorage.Default.GetAsync("oauth_token");
if (oauthToken == null)
{
// No value is associated with the key "oauth_token"
}
Conseil
S’il n’existe pas de valeur associée à la clé, GetAsync
retourne null
.
Supprimer une valeur
Pour supprimer une valeur spécifique, supprimez la clé :
bool success = SecureStorage.Default.Remove("oauth_token");
Pour supprimer toutes les clés, utilisez la méthode RemoveAll
:
SecureStorage.Default.RemoveAll();
Différences selon les plateformes
Cette section décrit les différences propres à la plateforme concernant l’API de stockage sécurisé.
SecureStorage
utilise l’API Préférences et suit la même persistance des données décrite dans la documentation Préférences, avec un nom de fichier [YOUR-APP-PACKAGE-ID].microsoft.maui.essentials.preferences. Toutefois, les données sont chiffrées avec la classe Android EncryptedSharedPreferences
, à partir de la bibliothèque de sécurité Android, qui encapsule la classe SharedPreferences
et chiffre automatiquement les clés et les valeurs à l’aide d’une approche à deux schémas :
- Les clés sont chiffrées de manière déterministe, afin que la clé puisse être chiffrée et correctement recherchée.
- Les valeurs ne sont pas chiffrées de manière déterministe à l’aide d’AES-256 GCM.
Pour plus d’informations sur la bibliothèque de sécurité Android, consultez Utiliser les données de manière plus sécurisée sur developer.android.com.
Limites
Les performances peuvent être affectées si vous stockez du texte en grande quantité, car l’API a été conçue pour stocker de petites quantités de texte.