Xamarin.Essentials: Sicherer Speicher

Mit der Klasse SecureStorage können Sie einfache Schlüssel/Wertpaare sicher speichern.

Erste Schritte

Lesen Sie zum Einstieg in die Verwendung dieser API den Leitfaden mit ersten Schritte für Xamarin.Essentials, um sicherzustellen, dass die Bibliothek ordnungsgemäß installiert und in Ihren Projekten eingerichtet ist.

Der Zugriff auf die SecureStorage-Funktionalität erfordert das folgende plattformspezifische Setup:

Tipp

Die Automatische Sicherung für Apps ist eine Funktion von Android 6.0 (API-Ebene 23) und höher, die die App-Daten von Benutzern sichert (freigegebene Einstellungen, Dateien im internen App-Speicher und andere spezifische Dateien). Die Daten werden wiederhergestellt, wenn eine App neu installiert oder auf einem neuen Gerät installiert wird. Dies kann sich auf die SecureStorage-Klasse auswirken, die Freigabeeinstellungen verwendet, die gesichert werden und nicht beim Wiederherstellen entschlüsselt werden können. Xamarin.Essentials verarbeitet diesen Fall automatisch durch Entfernen des Schlüssels, um das Zurücksetzen zu ermöglichen. Sie können die automatische Sicherung jedoch auch manuell deaktivieren.

Aktivieren und Deaktivieren der Sicherung

Sie können die automatische Sicherung für Ihre gesamte Anwendung deaktivieren, indem Sie die Einstellung android:allowBackup in der Datei AndroidManifest.xml auf FALSE festlegen. Dieser Ansatz wird nur empfohlen, wenn Sie Daten auf eine andere Weise wiederherstellen möchten.

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

Selektive Sicherung

Die automatische Sicherung lässt sich konfigurieren, um bestimmte Inhalte davon auszuschließen. Sie können ein benutzerdefiniertes Regelset erstellen, um SecureStore-Elemente von der Sicherung auszuschließen.

  1. Legen Sie das android:fullBackupContent-Attribut in Ihrer AndroidManifest.xml fest:

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. Erstellen Sie eine neue XML-Datei mit dem Namen auto_backup_rules.xml mit dem Buildvorgang AndroidResource im Verzeichnis Resources/xml. Legen Sie dann den folgenden Inhalt fest, der alle freigegebenen Einstellungen mit Ausnahme von SecureStorage enthält:

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

Verwenden des sicheren Speichers

Fügen Sie in Ihrer Klasse einen Verweis auf Xamarin.Essentials hinzu:

using Xamarin.Essentials;

So speichern Sie einen Wert für einen bestimmten Schlüssel im sicheren Speicher:

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

So rufen Sie einen Wert aus dem sicheren Speicher ab:

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

Hinweis

Wenn dem angeforderten Schlüssel kein Wert zugeordnet ist, gibt GetAsyncnull zurück.

So entfernen Sie einen bestimmten Schlüssel:

SecureStorage.Remove("oauth_token");

Rufen Sie Folgendes auf, um alle Schlüssel zu entfernen:

SecureStorage.RemoveAll();

Tipp

Es kann vorkommen, dass beim Aufruf von GetAsync oder SetAsync eine Ausnahme ausgelöst wird. Dies kann darauf zurückzuführen sein, dass ein Gerät keinen sicheren Speicher unterstützt, dass Verschlüsselungsschlüssel geändert wurden oder dass Daten beschädigt sind. Diese Fälle behandeln Sie am besten, indem Sie die Einstellung nach Möglichkeit entfernen und wieder hinzufügen.

Besonderheiten bei der plattformspezifischen Implementierung

Der Android-KeyStore wird verwendet, um den Chiffrierschlüssel zu speichern, mit dem der Wert verschlüsselt wurde, bevor er in einer freigegebenen Einstellung mit einem Dateinamen von [YOUR-APP-PACKAGE-ID].xamarinessentials gespeichert wird. Der in der freigegebenen Einstellungsdatei verwendete Schlüssel (kein kryptografischer Schlüssel, sondern der Schlüssel für den Wert) ist ein MD5-Hash des Schlüssels, der an die SecureStorage-APIs übergeben wird.

API-Ebene 23 und höher

Auf neueren API-Ebenen wird ein AES-Schlüssel im Android-KeyStore abgerufen und mit einer AES/GCM/NoPadding-Verschlüsselung verwendet, um den Wert zu verschlüsseln, bevor er in der freigegebenen Einstellungsdatei gespeichert wird.

API-Ebene 22 und niedriger

Auf älteren API-Ebenen unterstützt der Android-KeyStore nur das Speichern von RSA-Schlüsseln, die mit einer RSA/ECB/PKCS1Padding-Verschlüsselung verwendet werden, um einen AES-Schlüssel zu verschlüsseln (zufällig zur Laufzeit erzeugt), und in der freigegebenen Einstellungsdatei unter dem Schlüssel SecureStorageKey gespeichert werden, wenn noch keiner generiert wurde.

SecureStorage verwendet die Einstellungen-API und berücksichtigt die in der Dokumentation Einstellungen beschriebene Datenpersistenz. Wenn ein Gerät von API-Ebene 22 oder niedriger auf API-Ebene 23 oder höher aktualisiert wird, wird diese Art der Verschlüsselung weiterhin verwendet, es sei denn, die App wird deinstalliert oder RemoveAll aufgerufen.

Einschränkungen

Diese API wurde zum Speichern kleiner Textmengen konzipiert. Die Leistung ist ggf. langsam, wenn Sie versuchen, damit große Textmengen zu speichern.

API

Auf Channel 9 und auf YouTube finden Sie weitere Videos zu Xamarin.