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.
Legen Sie das
android:fullBackupContent
-Attribut in Ihrer AndroidManifest.xml fest:<application ... android:fullBackupContent="@xml/auto_backup_rules"> </application>
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 GetAsync
null
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
Zugehörige Videos
Auf Channel 9 und auf YouTube finden Sie weitere Videos zu Xamarin.