Udostępnij za pośrednictwem


Bezpieczny magazyn

Przeglądaj przykład. Przeglądanie przykładu

W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI). ISecureStorage Ten interfejs ułatwia bezpieczne przechowywanie prostych par klucz/wartość.

Domyślna implementacja interfejsu ISecureStorage jest dostępna za pośrednictwem SecureStorage.Default właściwości . Zarówno interfejs, jak ISecureStorage i SecureStorage klasa są zawarte w Microsoft.Maui.Storage przestrzeni nazw.

Rozpocznij

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

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 SecureStorageusługę , która korzysta z preferencji udostępniania, których kopia zapasowa jest tworzona i nie można jej odszyfrować po zakończeniu przywracania. Program .NET MAUI automatycznie obsługuje ten przypadek, usuwając klucz, aby można go było zresetować. Alternatywnie można wyłączyć automatyczne tworzenie kopii zapasowej.

Włączanie lub wyłączanie kopii zapasowej

Możesz wyłączyć automatyczną kopię zapasową dla całej aplikacji, ustawiając wartość android:allowBackup false w pliku AndroidManifest.xml . 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 Platformy/Android/Resources/xml za pomocą akcji kompilacji AndroidResource. 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}.microsoft.maui.essentials.preferences.xml"/>
    </full-backup-content>
    

Korzystanie z bezpiecznego magazynu

W poniższych przykładach kodu pokazano, jak używać bezpiecznego magazynu.

Napiwek

Istnieje możliwość, że wyjątek jest zgłaszany podczas wywoływania metody GetAsync 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.

Pisanie wartości

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

await SecureStorage.Default.SetAsync("oauth_token", "secret-oauth-token-value");

Odczytywanie wartości

Aby pobrać wartość z bezpiecznego magazynu:

string oauthToken = await SecureStorage.Default.GetAsync("oauth_token");

if (oauthToken == null)
{
    // No value is associated with the key "oauth_token"
}

Napiwek

Jeśli nie ma wartości skojarzonej z kluczem, GetAsync zwraca wartość null.

Usuwanie wartości

Aby usunąć określoną wartość, usuń klucz:

bool success = SecureStorage.Default.Remove("oauth_token");

Aby usunąć wszystkie wartości, użyj RemoveAll metody :

SecureStorage.Default.RemoveAll();

Różnice między platformami

W tej sekcji opisano różnice specyficzne dla platformy dotyczące bezpiecznego interfejsu API magazynu.

SecureStorageużywa interfejsu API preferencji i jest zgodny z tą samą trwałością danych opisaną w dokumentacji Preferencji z nazwą pliku [YOUR-APP-PACKAGE-ID].microsoft.maui.essentials.preferences. Jednak dane są szyfrowane przy użyciu klasy systemu Android z biblioteki zabezpieczeń systemu Android EncryptedSharedPreferences , która opakowuje klasę i automatycznie szyfruje SharedPreferences klucze i wartości przy użyciu podejścia dwu schema:

  • Klucze są deterministycznie szyfrowane, dzięki czemu klucz można zaszyfrować i prawidłowo wyszukać.
  • Wartości są niedeterministyczne szyfrowane przy użyciu usługi AES-256 GCM.

Aby uzyskać więcej informacji na temat biblioteki zabezpieczeń systemu Android, zobacz Praca z danymi bezpieczniej na developer.android.com.

Ograniczenia

Wydajność może mieć wpływ na przechowywanie dużych ilości tekstu, ponieważ interfejs API został zaprojektowany do przechowywania małych ilości tekstu.