Fitur fingerprint ini diperkenalkan pertama kali di Android v.6.0, sebuah fitur keamanan baru yang mamapu mengkonfirmasi identitas pengguna asli hanya dengan sekali sentuh. Sejauh ini fitur fingerprint masih umum diterapkan di lockscreen, belum banyak diterapkan untuk memperkuat keamanan sebuah aplikasi, padahal sebenarnya itu sangat mungkin dilakukan, apalagi aplikasi-aplikasi sensitif seperti payment app misalnya. Memberikan alternatif otentikasi login selain username & password dengan satu sentuhan fingerprint akan sangat Memberikan kenyamanan lebih bagi pengguna.
Experiment kali ini saya akan menunjukan kepada Anda tentang bagaimana membuat prototype fingerprint, yang nantinya dapat Anda terapkan di project android apapun.
Gambaran umum alur prototype ini adalah user mendaftarkan sidik jari mereka di perangkat Android (setidaknya perlu 1 sidik jari yang didaftarkan).
Selain itu kita juga akan menguji bagaimana aplikasi ini berjalan di perangkat yang belum support fingerprint, seperti di Android Virtual Devices (AVDs) / Emulator misalnya. Tentu kita tidak boleh diam saja mengatasi hal ini, harus UI/UX untuk mengatasi pengecualian ini.
Mengapa Saya Peduli Tentang Fingerprint Authentication?
Menambahkan fingerprint authentication di project sama saja memperibet proses logic otentikasi app Anda, maksudnya apakah ini sepadan dengan benefit yang didapatkan?, ini patut dipahami dan dipertimbangkan sebelum Anda mengeksekusinya ke production project.
Cara tercepat & ternyaman mengidentifikasi pengguna asli. Tidak dapat disangkal bahwa tradisional PIN, pattern atau password adalah metode paling efektif dan aman, namun tidak dapat menghindari human error seperti lupa atau typo saat proses otentikasi / login, jadi kehadiran fingerprint ini sangat solutip untuk mengatasi human error tersebut.
Pengguna tidak mungkin melupakan sidik jarinya. Pada umumnya pengguna memilih kata sandi yang panjang dan kuat, di sisi lain pengguna juga mengkonsumsi aplikasi lain untuk mendukung aktivitas hariannya dan praktik terbaik mengamankan akun adalah "jangan menggunakan password yang sama untuk akun yang berbeda", ini berpotensi sekali terhadap human error seperti lupa, atau mencatat password di tempat yang tidak aman, jadi kehadiran fingerprint masih sangat relevan.
Anti typo atau kepayahan dengan keyboard. Tidak hanya panjang dan kompleks, kadang kala keyboard pengguna susah dijangkau saat situasi sibuk dan hirukpikuk, apalagi perangkat ponsel pengguna yang kecil bakal menambah kepayahan itu. Sampai di poin ini kehadiran fingerprint masih sangat relevan.
Tidak perlu pusing recovery atau reset password. Kesialan yang mengancam pemilik banyak akun adalah lupa password, meskipun itu bisa diatasi dengan reset password tapi bakal menyita banyak waktu pengguna untuk memulihkannya, karena harus menghadapi prosedur yang bertele-tele, belum lagi password yang digunakan tidak boleh sama dan itu bisa mengacaukan otak mereka dengan harus mengingat hal baru lagi.
Sidik jari setiap pengguna sangatlah unik dan tidak mungkin ditebak. Salah satu karunia Tuhan Yang Maha Esa yang patut kita syukuri. Tidak ada jaminan setiap pengguna bisa menebak sidik jari mereka, bahkan spyware, meskipun tidak ada jaminan 100% aman untuk app yang ada di muka bumi ini.
Login biometrik memberikan metode yang nyaman untuk mengotorisasi akses ke konten pribadi dalam aplikasi Anda. Alih-alih harus mengingat nama pengguna dan kata sandi akun setiap kali mereka membuka aplikasi Anda, pengguna cukup menggunakan kredensial biometrik mereka untuk mengonfirmasi kehadiran mereka dan memberi otorisasi akses ke konten pribadi.
Apa yang diperlukan untuk membangun fitur ini?
- Android Studio minimal versi 3.6 atau diatasnya
- Android device yang berjalan diatas OS Android 8.0 (oreo) atau diatasnya, dan tentu saja yang embed biometric sensor.
- Pengetahuan tentang Android development dan bahasa kotlin.
Apa yang akan kita lakukan?
Terus terang sangat tidak efektif jika saya membuat tutorial yang sama yang telah dibuat oleh tim codelab google, jadi saya hanya akan mereview bagian-bagian fundamental saja yang mana berhasil saya terapkan di project saya. Sebelum memulai ada baiknya kaliam melihat cara kerja prototype ini dengan cara clone run di device Anda.
git clone https://github.com/googlecodelabs/biometric-login.git
1. Tidak perlu permissoin di manifest
Meninjau ulang tutorial yang bertebaran di jagat maya ini, banyak sekali saya temui mereka masih mendeklare permission di manifest mereka untuk mengakses sensor biometric, seperti ini misalnya.
<uses-feature android:name="android.hardware.fingerprint"
android:required="true"/>
dan ini,
<uses-permission
android:name="android.permission.USE_FINGERPRINT" />
Saya sarankan jangan pakai cara yang sudah usang itu. Cara paling yahud adalah mengikuti petunjuk yang dibuat oleh tim google di codelabnya, jadi kita cukup menggunakan dependensi berikut.
dependencies {
implementation "androidx.biometric:biometric:1.0.1"
}
Mengkonfigurasikan Biometric ke Halaman Login
- Saya asumsikan Anda sudah mempunyai aplikasi dengan standar form login.
- Kita perlu membuat class
CryptographyManager
yang kita tugaskan untuk mengatur proses encryption & decryption.
- Kita juga perlu buat class
BiometricPromptUtils
, BiometricPrompt
yang nantinya perlu kita panggil.
CryptographyManager
Inti dari API biometric authentication ini adalah memanggil BiometricPrompt
, data class yang kita gunakan untuk berkomunikasi dengan API tersebut adalah CryptoObject
, disitu diperlukan Cipher
, atau MAC
, atau Signature
, atau IdentityCredential
sebagai parameternya, nah dalam kasus ini saya memilih menggunakan Cipher
.
Gambaran Umum
Terus terang saya tidak menerapkan seluruhnya apa yang ada dalam modul codelab google, saya hanya mengimplementasikan intinya saja, dan tentu ini masih prototype karena data yang terenkripsi masih saya simpan di lokal (sharedPreference), padahal business logic yang sebenarnya adalah semua data sensitif ini ditaruh di server.
Secara garis besar, alur kerja prototype biometric ini adalah sebagai berikut.
POST
register identity (username + password + fingerprint) -> enkripsi -> simpan di local / simpan di cloud
GET
fetch data encrypted from local / clound -> authorization (fingerprint) -> decrypt -> PASS / REJECT