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.
android:fullBackupContent
Ustaw atrybut w AndroidManifest.xml:<application ... android:fullBackupContent="@xml/auto_backup_rules"> </application>
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
Powiązany film wideo
Więcej filmów na platformie Xamarin można znaleźć w witrynach Channel 9 i YouTube.