Saya akan menggunakan oAuth untuk mengambil email dan kontak dari google. Saya tidak ingin meminta pengguna setiap kali masuk untuk mendapatkan token akses dan rahasia. Dari apa yang saya pahami, saya perlu menyimpannya dengan aplikasi saya baik dalam database atau SharedPreferences
. Tapi saya agak khawatir tentang aspek keamanan dengan itu. Saya membaca bahwa Anda dapat mengenkripsi dan mendekripsi token tetapi mudah bagi penyerang untuk hanya mendekompilasi apk dan kelas Anda dan mendapatkan kunci enkripsi.
Apa metode terbaik untuk menyimpan token ini dengan aman di Android?
123
Jawaban:
Simpan sebagai preferensi bersama . Itu secara default pribadi, dan aplikasi lain tidak dapat mengaksesnya. Pada perangkat yang di-rooting, jika pengguna secara eksplisit mengizinkan akses ke beberapa aplikasi yang mencoba membacanya, aplikasi tersebut mungkin dapat menggunakannya, tetapi Anda tidak dapat melindunginya. Sedangkan untuk enkripsi, Anda harus meminta pengguna untuk memasukkan frasa sandi dekripsi setiap kali (sehingga mengalahkan tujuan kredensial caching), atau menyimpan kunci ke file, dan Anda mendapatkan masalah yang sama.
Ada beberapa keuntungan menyimpan token selain kata sandi nama pengguna yang sebenarnya:
sumber
Anda dapat menyimpannya di AccountManager . Itu dianggap praktik terbaik menurut orang-orang ini.
Berikut definisi resminya:
Untuk panduan mendetail tentang cara menggunakan AccountManager:
Namun, pada akhirnya AccountManager hanya menyimpan token Anda sebagai teks biasa. Jadi, saya sarankan mengenkripsi rahasia Anda sebelum menyimpannya di AccountManager. Anda dapat memanfaatkan berbagai pustaka Enkripsi seperti AESCrypt atau AESCrypto
Pilihan lainnya adalah dengan menggunakan perpustakaan Tersembunyi . Cukup aman untuk Facebook dan jauh lebih mudah digunakan daripada AccountManager. Berikut potongan kode untuk menyimpan file rahasia menggunakan Conceal.
sumber
SharedPreferences bukanlah lokasi yang aman. Pada perangkat yang di-rooting, kami dengan mudah dapat membaca dan memodifikasi semua aplikasi 'SharedPrefereces xml's. Jadi token harus sering kedaluwarsa. Tetapi meskipun token kedaluwarsa setiap jam, token yang lebih baru masih dapat dicuri dari SharedPreferences. Android KeyStore harus digunakan untuk penyimpanan jangka panjang dan pengambilan kunci kriptografi yang akan digunakan untuk mengenkripsi token kami untuk menyimpannya di misalnya SharedPreferences atau database. Kunci tidak disimpan dalam proses aplikasi, jadi lebih sulit untuk disusupi.
Jadi yang lebih relevan daripada sebuah tempat adalah bagaimana mereka dapat mengamankan dirinya sendiri misalnya menggunakan JWT berumur pendek yang ditandatangani secara kriptografis, mengenkripsi mereka menggunakan Android KeyStore dan mengirimkannya dengan protokol yang aman
sumber
Sekarang muat bacaan Access Token and Secret di file build.gradle modul aplikasi Anda . Kemudian Anda perlu menentukan variabel BuildConfig untuk Access Token dan Secret sehingga Anda dapat langsung mengaksesnya dari kode Anda. Build.gradle Anda mungkin terlihat seperti berikut:
Anda dapat menggunakan Access Token and Secret dalam kode Anda seperti ini:
Dengan cara ini Anda tidak perlu menyimpan Access Token dan Secret dalam teks biasa di dalam proyek Anda. Jadi, meskipun seseorang mendekompilasi APK Anda, mereka tidak akan pernah mendapatkan Token Akses dan Rahasia Anda saat Anda memuatnya dari file eksternal.
sumber
Nah, Anda dapat mengamankan token akses Anda dengan mengikuti dua opsi.
sumber