次の方法で共有


セキュリティで保護されたストレージ

サンプルを参照します。 サンプルを参照する

この記事では、.NET マルチプラットフォーム アプリ UI (.NET MAUI) ISecureStorage インターフェイスを使用する方法について説明します。 このインターフェイスは、単純なキーと値のペアを安全に格納するのに役立ちます。

ISecureStorage インターフェイスの既定の実装は、SecureStorage.Default プロパティを通じて利用できます。 ISecureStorage インターフェイスと SecureStorage クラスはどちらも Microsoft.Maui.Storage 名前空間に含まれています。

作業の開始

SecureStorage の機能にアクセスするには、次のプラットフォーム固有の設定が必要です。

アプリの自動バックアップは Android 6.0 (API レベル 23) 以降の機能です。ユーザーのアプリ データ (共有の設定、アプリの内部ストレージ内のファイル、その他の特定のファイル) がバックアップされます。 アプリが新しいデバイスに再インストールまたはインストールされると、データが復元されます。 これは、バックアップされ、復元するときに暗号化解除できない共有の設定を利用する SecureStorage に影響を与えます。 .NET MAUI は、キーを削除してリセットできるようにすることで、このケースを自動的に処理します。 または、自動バックアップを無効にすることもできます。

バックアップを有効または無効にする

AndroidManifest.xml ファイルの android:allowBackup 設定を false に設定することで、アプリケーション全体の自動バックアップを無効にすることができます。 この方法が推奨されるのは、データを復元する別の方法を計画する場合のみです。

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

選択的なバックアップ

自動バックアップを構成して、特定のコンテンツのバックアップを無効にすることができます。 カスタム規則セットを作成して、バックアップ対象から SecureStore 項目を除外することができます。

  1. AndroidManifest.xmlandroid:fullBackupContent 属性を設定します。

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. auto_backup_rules.xml という名前の新しい XML ファイルを、AndroidResource のビルド アクションで Platforms/Android/Resources/xml ディレクトリに作成します。 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>
    

セキュリティで保護されたストレージを使用する

次のコード例は、安全なストレージの使用方法を示しています。

ヒント

GetAsync または SetAsync の呼び出し時に例外がスローされることがあります。 セキュリティで保護されたストレージに対応していないデバイス、暗号化キーの変更、データの破損が原因として考えられます。 可能であれば、設定を削除して追加し直すことで、これに対処することをお勧めします。

値を書き込む

指定されたキーに対する値をセキュリティで保護されたストレージに保存するには:

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"
}

ヒント

キーに関連付けられている値がない場合、GetAsyncnull を返します。

値の削除

特定の値を削除するには、キーを削除します。

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

すべての値を削除するには、RemoveAll メソッドを使用します。

SecureStorage.Default.RemoveAll();

プラットフォームによる違い

このセクションでは、セキュリティで保護されたストレージ API とのプラットフォーム固有の違いについて説明します。

SecureStorage は、Preferences API を使用し、Preferences ドキュメントで概要が説明されているのと同じデータ永続性に従います。ファイル名は [YOUR-APP-PACKAGE-ID].microsoft.maui.essentials.preferences です。 ただし、データは Android セキュリティ ライブラリの Android EncryptedSharedPreferences クラスで暗号化されます。このクラスは SharedPreferences クラスをラップし、2 つのスキーム アプローチを使用してキーと値を自動的に暗号化します。

  • キーは決定的に暗号化されるため、キーを暗号化して適切に検索できます。
  • 値は、AES-256 GCM を使用して非決定的に暗号化されます。

Android セキュリティ ライブラリの詳細については、developer.android.com の「より安全にデータを操作する」をご覧ください。

制限事項

API は少量のテキストを保存するように設計されているため、大量のテキストを保存するとパフォーマンスに影響する可能性があります。