Bagikan melalui


Xamarin.Essentials: Penyimpanan Aman

Kelas SecureStorage membantu menyimpan pasangan kunci/nilai sederhana dengan aman.

Memulai

Untuk mulai menggunakan API ini, baca panduan memulai untuk Xamarin.Essentials memastikan pustaka diinstal dan disiapkan dengan benar di proyek Anda.

Untuk mengakses fungsionalitas SecureStorage , diperlukan penyiapan khusus platform berikut:

Tip

Pencadangan Otomatis untuk Aplikasi adalah fitur Android 6.0 (API level 23) dan yang lebih baru yang mencadangkan data aplikasi pengguna (preferensi bersama, file di penyimpanan internal aplikasi, dan file spesifik lainnya). Data dipulihkan saat aplikasi diinstal ulang atau diinstal pada perangkat baru. Ini dapat memengaruhi SecureStorage yang menggunakan preferensi berbagi yang dicadangkan dan tidak dapat didekripsi ketika pemulihan terjadi. Xamarin.Essentials secara otomatis menangani kasus ini dengan menghapus kunci sehingga dapat diatur ulang, tetapi Anda dapat mengambil langkah tambahan dengan menonaktifkan Pencadangan Otomatis.

Mengaktifkan atau menonaktifkan pencadangan

Anda dapat memilih untuk menonaktifkan Pencadangan Otomatis untuk seluruh aplikasi Anda dengan mengatur android:allowBackup pengaturan ke false dalam AndroidManifest.xml file. Pendekatan ini hanya disarankan jika Anda berencana memulihkan data dengan cara lain.

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

Pencadangan Selektif

Pencadangan Otomatis dapat dikonfigurasi untuk menonaktifkan konten tertentu dari pencadangan. Anda dapat membuat seperangkat aturan kustom untuk mengecualikan SecureStore item agar tidak dicadangkan.

  1. Atur android:fullBackupContent atribut di AndroidManifest.xml Anda:

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. Buat file XML baru bernama auto_backup_rules.xml di direktori Sumber Daya/xml dengan tindakan build AndroidResource. Kemudian atur konten berikut yang mencakup semua preferensi bersama kecuali untuk 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>
    

Menggunakan Penyimpanan Aman

Tambahkan referensi ke Xamarin.Essentials di kelas Anda:

using Xamarin.Essentials;

Untuk menyimpan nilai untuk kunci tertentu dalam penyimpanan aman:

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

Untuk mengambil nilai dari penyimpanan aman:

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

Catatan

Jika tidak ada nilai yang terkait dengan kunci yang diminta, GetAsync akan mengembalikan null.

Untuk menghapus kunci tertentu, panggil:

SecureStorage.Remove("oauth_token");

Untuk menghapus semua kunci, panggil:

SecureStorage.RemoveAll();

Tip

Ada kemungkinan bahwa pengecualian dilemparkan saat memanggil GetAsync atau SetAsync. Ini dapat disebabkan oleh perangkat yang tidak mendukung penyimpanan aman, kunci enkripsi yang berubah, atau kerusakan data. Yang terbaik adalah menangani ini dengan menghapus dan menambahkan pengaturan kembali jika memungkinkan.

Spesifikasi Implementasi Platform

Android KeyStore digunakan untuk menyimpan kunci cipher yang digunakan untuk mengenkripsi nilai sebelum disimpan ke Preferensi Bersama dengan nama file [YOUR-APP-PACKAGE-ID].xamarinessentials. Kunci (bukan kunci kriptografi, kunci ke nilai) yang digunakan dalam file preferensi bersama adalah Hash MD5 dari kunci yang diteruskan ke SecureStorage API.

API Level 23 dan Yang Lebih Tinggi

Pada tingkat API yang lebih baru, kunci AES diperoleh dari Android KeyStore dan digunakan dengan cipher AES/GCM/NoPadding untuk mengenkripsi nilai sebelum disimpan dalam file preferensi bersama.

API Level 22 dan Lower

Pada tingkat API yang lebih lama, Android KeyStore hanya mendukung penyimpanan kunci RSA , yang digunakan dengan cipher RSA/ECB/PKCS1Padding untuk mengenkripsi kunci AES (dihasilkan secara acak saat runtime) dan disimpan dalam file preferensi bersama di bawah kunci SecureStorageKey, jika belum dibuat.

SecureStorage menggunakan Api Preferensi dan mengikuti persistensi data yang sama yang diuraikan dalam dokumentasi Preferensi . Jika perangkat ditingkatkan dari API level 22 atau lebih rendah ke API level 23 dan yang lebih tinggi, jenis enkripsi ini akan terus digunakan kecuali aplikasi dihapus instalannya atau RemoveAll dipanggil.

Batasan

API ini dimaksudkan untuk menyimpan teks dalam jumlah kecil. Performa mungkin lambat jika Anda mencoba menggunakannya untuk menyimpan teks dalam jumlah besar.

API

Temukan video Xamarin lainnya di Channel 9 dan YouTube.