Xamarin.Essentials: Bezpieczny magazyn

Klasa SecureStorage pomaga bezpiecznie przechowywać proste pary klucz/wartość.

Rozpocznij

Aby rozpocząć korzystanie z tego interfejsu API, przeczytaj przewodnik wprowadzający , Xamarin.Essentials aby upewnić się, że biblioteka jest prawidłowo zainstalowana i skonfigurowana w projektach.

Aby uzyskać dostęp do funkcji SecureStorage , wymagana jest następująca konfiguracja specyficzna dla platformy:

Napiwek

Automatyczne tworzenie kopii zapasowych aplikacji to funkcja systemu Android 6.0 (poziom 23 interfejsu API) i nowsza, która wykonuje kopię zapasową danych aplikacji użytkownika (udostępnione preferencje, pliki w magazynie wewnętrznym aplikacji i inne określone pliki). Dane są przywracane po ponownym zainstalowaniu lub zainstalowaniu aplikacji na nowym urządzeniu. Może to mieć wpływ na SecureStorage użycie preferencji udostępniania, których kopia zapasowa jest tworzona i nie można jej odszyfrować po zakończeniu przywracania. Xamarin.Essentials Automatycznie obsługuje ten przypadek, usuwając klucz, aby można go było zresetować, ale możesz wykonać dodatkowy krok, wyłączając automatyczne tworzenie kopii zapasowej.

Włączanie lub wyłączanie kopii zapasowej

Możesz wyłączyć automatyczne tworzenie kopii zapasowej dla całej aplikacji, ustawiając android:allowBackup ustawienie na wartość false w AndroidManifest.xml pliku. Takie podejście jest zalecane tylko w przypadku planowania przywracania danych w inny sposób.

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

Selektywna kopia zapasowa

Automatyczne tworzenie kopii zapasowej można skonfigurować tak, aby wyłączyć tworzenie kopii zapasowej określonej zawartości. Można utworzyć niestandardowy zestaw reguł, aby wykluczyć SecureStore elementy z kopii zapasowej.

  1. android:fullBackupContent Ustaw atrybut w AndroidManifest.xml:

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. Utwórz nowy plik XML o nazwie auto_backup_rules.xml w katalogu Resources/xml za pomocą akcji kompilacji AndroidResource. Następnie ustaw następującą zawartość, która zawiera wszystkie udostępnione preferencje z wyjątkiem :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>
    

Korzystanie z bezpiecznego magazynu

Dodaj odwołanie do Xamarin.Essentials klasy:

using Xamarin.Essentials;

Aby zapisać wartość dla danego klucza w bezpiecznym magazynie:

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

Aby pobrać wartość z bezpiecznego magazynu:

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

Uwaga

Jeśli nie ma wartości skojarzonej z żądanym kluczem, GetAsync zwróci wartość null.

Aby usunąć określony klucz, wywołaj polecenie:

SecureStorage.Remove("oauth_token");

Aby usunąć wszystkie klucze, wywołaj polecenie:

SecureStorage.RemoveAll();

Napiwek

Istnieje możliwość, że wyjątek jest zgłaszany podczas wywoływania GetAsync metody lub SetAsync. Może to być spowodowane tym, że urządzenie nie obsługuje bezpiecznego magazynu, zmieniania kluczy szyfrowania lub uszkodzenia danych. Najlepiej to zrobić, usuwając i dodając ustawienie z powrotem, jeśli jest to możliwe.

Specyfika implementacji platformy

Magazyn kluczy systemu Android służy do przechowywania klucza szyfrowania używanego do szyfrowania wartości przed zapisaniem go w udostępnionych preferencjach z nazwą pliku [YOUR-APP-PACKAGE-ID].xamarinessentials. Klucz (nie klucz kryptograficzny, klucz do wartości) używany w udostępnionym pliku preferencji jest skrótem MD5 klucza przekazanego SecureStorage do interfejsów API.

Poziom interfejsu API 23 i wyższe

Na nowszych poziomach interfejsu API klucz AES jest uzyskiwany z magazynu kluczy systemu Android i używany z szyfrem AES/GCM/NoPadding w celu zaszyfrowania wartości przed zapisaniem go w udostępnionym pliku preferencji.

Poziom interfejsu API 22 i niższy

Na starszych poziomach interfejsu API magazyn kluczy systemu Android obsługuje tylko przechowywanie kluczy RSA, które są używane z szyfrem RSA/EBC/PKCS1Padding do szyfrowania klucza AES (generowanego losowo w czasie wykonywania) i przechowywanego w udostępnionym pliku preferencji w kluczu SecureStorageKey, jeśli jeszcze nie został wygenerowany.

Usługa SecureStorage używa interfejsu API preferencji i jest zgodna z tą samą trwałością danych opisaną w dokumentacji preferencji. Jeśli urządzenie zostanie uaktualnione z poziomu interfejsu API 22 lub niższego do poziomu 23 interfejsu API lub wyższego, tego typu szyfrowanie będzie nadal używane, chyba że aplikacja zostanie odinstalowana lub wywołana funkcja RemoveAll .

Ograniczenia

Ten interfejs API jest przeznaczony do przechowywania małych ilości tekstu. Wydajność może być niska, jeśli spróbujesz użyć go do przechowywania dużych ilości tekstu.

interfejs API

Więcej filmów na platformie Xamarin można znaleźć w witrynach Channel 9 i YouTube.