Поделиться через


Защищенное хранилище

Просмотрите пример. Обзор примера

В этой статье описывается, как использовать интерфейс многоплатформенного приложения .NET (.NET MAUI). ISecureStorage Этот интерфейс позволяет безопасно хранить простые пары "ключ-значение".

Реализация интерфейса по умолчанию ISecureStorage доступна через SecureStorage.Default свойство. Интерфейс ISecureStorage и SecureStorage класс содержатся в Microsoft.Maui.Storage пространстве имен.

Начало работы

Для доступа к SecureStorage функциональным возможностям требуется следующая настройка для конкретной платформы:

Auto Backup for Apps (Автоматическое резервное копирование для приложений) — это функция Android 6.0 (API уровня 23) и более поздних версий, которая создает резервные копии пользовательских данных из приложения (общие параметры, файлы во внутреннем хранилище приложения, некоторые другие файлы). Данные восстанавливаются при переустановке или установке приложения на новом устройстве. Это может повлиять SecureStorageна использование общих параметров, резервных копий которых выполняется и не может быть расшифровано при восстановлении. .NET MAUI автоматически обрабатывает этот случай, удалив ключ, чтобы его можно было сбросить. Кроме того, можно отключить автоматическое резервное копирование.

Включение и отключение резервного копирования

Вы можете отключить автоматическое резервное копирование для всего приложения, установив android:allowBackup значение false в файле AndroidManifest.xml . Мы рекомендуем использовать такой метод, только если вы планируете организовать другой способ восстановления данных.

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

Выборочное резервное копирование

Вы можете исключить из автоматического резервного копирования определенное содержимое. Можно создать настраиваемое правило, которое исключает элементы SecureStore из процесса резервного копирования.

  1. Настройте атрибут android:fullBackupContent в файле AndroidManifest.xml:

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. Создайте XML-файл с именем auto_backup_rules.xml в каталоге Platform/Android/Resources/xml с действием сборки AndroidResource. Задайте следующее содержимое, включающее все общие предпочтения, кроме 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>
    

Использование безопасного хранилища

В следующих примерах кода показано, как использовать безопасное хранилище.

Совет

Возможно, при вызове или SetAsyncвызове GetAsync возникает исключение. Это может быть вызвано тем, что устройство не поддерживает безопасное хранение, изменение ключей шифрования или повреждение данных. Лучше всего это сделать, удалив и добавив параметр обратно, если это возможно.

Запись значения

Чтобы сохранить значение определенного ключа в защищенное хранилище, используйте следующий код:

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

Чтение значения

Чтобы извлечь значение из защищенного хранилища, используйте следующий код:

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

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

Совет

Если с ключом нет значения, GetAsync возвращается null.

Удаление значения

Чтобы удалить определенное значение, удалите ключ:

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

Чтобы удалить все значения, используйте RemoveAll метод:

SecureStorage.Default.RemoveAll();

Различия между платформами

В этом разделе описываются различия платформы с API безопасного хранилища.

SecureStorageиспользует API параметров и следует тому же сохраняемости данных, описанным в документации по параметрам, с именем файла [YOUR-APP-PACKAGE-ID].microsoft.maui.essentials.preferences. Однако данные шифруются с помощью класса Android из библиотеки Безопасности Android EncryptedSharedPreferences , которая упаковывает SharedPreferences класс и автоматически шифрует ключи и значения с помощью двух схем:

  • Ключи детерминированы детерминированно зашифрованы, чтобы ключ можно было зашифровать и правильно найти.
  • Значения не детерминированы с помощью AES-256 GCM.

Дополнительные сведения о библиотеке безопасности Android см. в статье "Работа с данными более безопасно в developer.android.com".

Ограничения

Производительность может повлиять на хранение больших объемов текста, так как API был разработан для хранения небольших объемов текста.