Xamarin.Essentials: Stockage sécurisé

La classe SecureStorage permet de stocker en toute sécurité des paires clé/valeur simples.

Bien démarrer

Pour commencer à utiliser cette API, lisez le guide de prise en main pour Xamarin.Essentials vous assurer que la bibliothèque est correctement installée et configurée dans vos projets.

Pour accéder à la fonctionnalité SecureStorage, la configuration requise dépend de la plateforme :

Conseil

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 quand l’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. Xamarin.Essentials gère automatiquement ce cas en supprimant la clé afin qu’elle puisse être réinitialisée, mais vous pouvez effectuer une étape supplémentaire en désactivant 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.

  1. Définissez l’attribut android:fullBackupContent dans AndroidManifest.xml :

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. Créez un fichier XML nommé auto_backup_rules.xml dans le répertoire ressources/xml à l’aide de l’action de génération d’AndroidResource. Ensuite, 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}.xamarinessentials.xml"/>
    </full-backup-content>
    

Utiliser SecureStorage

Ajoutez une référence à Xamarin.Essentials dans votre classe :

using Xamarin.Essentials;

Pour enregistrer une valeur de clé donnée dans SecureStorage :

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

Pour récupérer une valeur de SecureStorage :

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

Notes

Si aucune valeur n’est associée à la clé demandée, GetAsync retourne null.

Pour supprimer une certaine clé, appelez :

SecureStorage.Remove("oauth_token");

Pour supprimer toutes les clés, appelez :

SecureStorage.RemoveAll();

Conseil

Il est possible qu’une exception soit levée lors de l’appel GetAsync de ou SetAsync. Cela peut être dû au fait qu’un appareil 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 ajoutant le paramètre si possible.

Caractéristiques de mise en œuvre de la plateforme

Le magasin de clés Android est utilisé pour stocker la clé de chiffrement permettant de chiffrer la valeur avant de l’enregistrer dans les Préférences partagées avec le nom de fichier [VOTRE-ID-DE-PACKAGE-D-APPLICATION].xamarinessentials. La clé (qui n’est pas une clé de chiffrement, mais la clé de la valeur) utilisée dans le fichier de préférences partagées est un hachage MD5 de la clé transmise aux APISecureStorage.

Niveau d’API 23 et plus

Dans les niveaux d’API récents, une clé AES est récupérée auprès du magasin de clés Android et utilisée avec un chiffrement AES/GCM/NoPadding permettant de chiffrer la valeur avant de la stocker dans le fichier de préférences partagées.

Niveau d’API 22 et moins

Dans les anciens niveaux d’API, le magasin de clés Android ne prend en charge que le stockage de clés RSA, utilisées avec un chiffrement ECB/RSA/PKCS1Padding pour chiffrer une clé AES (générée au hasard à l’exécution) et stockées dans le fichier de préférences partagées sous la clé SecureStorageKey, si elle n’a pas déjà été générée.

SecureStorage utilise l’API Préférences et suit la persistance des données décrite dans la documentation Préférences. Si un appareil est mis à niveau du niveau d’API 22 (ou moins) au niveau d’API 23 (ou plus), ce type de chiffrement sera toujours utilisé, sauf si l’application est désinstallée ou si RemoveAll est appelé.

Limites

Cette API est destinée à stocker de petites quantités de texte. Les performances risquent d’être lentes si vous essayez de l’utiliser pour stocker de grandes quantités de texte.

API

Retrouvez d’autres vidéos Xamarin sur Channel 9 et YouTube.