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.
Atur
android:fullBackupContent
atribut di AndroidManifest.xml Anda:<application ... android:fullBackupContent="@xml/auto_backup_rules"> </application>
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.