Ilovaga Face ID va barmoq izi orqali kirishni qanday qo‘shish mumkin
Amaliyot3 daqInnovialabs tahririyati
Qisqacha
Biometriya ilovaga barmoq izi yoki yuzni bermaydi — u faqat qurilmaning himoyalangan xotirasidagi kalit yoki tokenni ochadi, shuning uchun to‘g‘ri Face ID kirish «ha/yo‘q» tekshiruviga emas, Keychain/Keystore’ga quriladi.
Aslida qanday ishlaydi
Ilova barmoq izini yoki yuz tasvirini hech qachon olmaydi. Solishtirishni qurilmaning himoyalangan moduli bajaradi: iPhone’da Secure Enclave, Android’da TEE yoki alohida chip. Tizim ilovaga faqat natijani xabar qiladi.
Bu natijadan foydalanishning ikki yo‘li bor:
- «Ha/yo‘q» tekshiruvi. Ilova «foydalanuvchi tasdiqladimi?» deb so‘raydi va
trueoladi. Oddiy, lekin buzilgan qurilmada javobni almashtirish mumkin. - Kriptografik bog‘lash. Sir (masalan, refresh token) yoki shifrlash kaliti Keychain/Keystore’da «faqat biometriyadan keyin berilsin» sharti bilan saqlanadi. Muvaffaqiyatli tekshiruvsiz ma’lumotlarga jismonan kirib bo‘lmaydi.
Akkauntga kirish uchun ikkinchi variantdan foydalaning. Birinchisi muhim bo‘lmagan narsalar uchun mos: ekran mazmunini yashirish, zararsiz harakatni tasdiqlash.
Odatiy kirish sxemasi
- Foydalanuvchi birinchi marta oddiy usulda kiradi: telefon va kod, parol yoki Apple/Google.
- Ilova Face ID yoki barmoq izi orqali kirishni yoqishni taklif qiladi.
- Refresh token biometriya talabi bilan himoyalangan xotiraga saqlanadi.
- Keyingi ishga tushirishda tizim biometrik so‘rovni ko‘rsatadi, xotira tokenni beradi, ilova serverdan yangi sessiya oladi.
Server biometriya haqida hech narsa bilmaydi — u oddiy token yangilanishini ko‘radi.
iOS’da amalga oshirish
.biometryCurrentSet kirish bayrog‘i bilan Keychain’dan foydalaning va Info.plist’ga tushunarli izoh bilan NSFaceIDUsageDescription kalitini qo‘shing — usiz Face ID so‘rovi ishlamaydi.
let access = SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
.biometryCurrentSet,
nil
)!
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "refresh_token",
kSecValueData as String: tokenData,
kSecAttrAccessControl as String: access
]
SecItemAdd(query as CFDictionary, nil)
Bu elementni o‘qishda tizim Face ID yoki Touch ID’ni o‘zi ko‘rsatadi.
Android’da amalga oshirish
Android Keystore’da foydalanuvchi autentifikatsiyasini talab qiladigan kalit yarating va Cipher’ni CryptoObject orqali BiometricPrompt’ga uzating. Tokenni faqat muvaffaqiyatli tekshiruvdan keyin deshifrlash mumkin.
val spec = KeyGenParameterSpec.Builder(
"session_key",
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setUserAuthenticationRequired(true)
.setInvalidatedByBiometricEnrollment(true)
.build()
Kriptografik bog‘lash uchun BIOMETRIC_STRONG sinfini so‘rang — kuchsiz qulfdan chiqarish usullari uni qo‘llab-quvvatlamaydi.
Flutter va React Native
- Flutter:
local_authpaketi faqat «ha/yo‘q» tekshiruvini beradi. Xotiraga bog‘lash uchun biometrik kirish parametrlari bilanflutter_secure_storage’dan yoki Keystore/Keychain orqali ishlaydigan maxsus paketlardan foydalaning. - React Native:
expo-local-authenticationham «ha/yo‘q». Tokenni biometriya ostida saqlash uchunaccessControlbilanreact-native-keychainyoki kalitlar yaratib, ma’lumotlarni imzolaydiganreact-native-biometricsmos keladi.
Paketni tanlashdan oldin u shunchaki tizim dialogini ko‘rsatmay, ichida haqiqatan Keychain/Keystore’dan foydalanishini tekshiring.
Zaxira ssenariy va barmoq izlarini almashtirish
- Fallback. Biometriya ishlamasligi mumkin: ho‘l barmoqlar, niqob, bir necha muvaffaqiyatsiz urinishdan keyin bloklanish. Har doim qurilma kodi, ilova PIN-kodi yoki to‘liq kirish orqali yo‘l qoldiring.
- Yangi barmoq izi yoki yuz.
.biometryCurrentSetvasetInvalidatedByBiometricEnrollment(true)bayroqlari bilan yangi biometriya qo‘shilsa, saqlangan sirga kirib bo‘lmaydi, Android’daKeyPermanentlyInvalidatedExceptionpaydo bo‘ladi. Bu xato emas, himoya: uni qayta ishlang, eski sirni o‘chiring, to‘liq kirishni va biometriyani qayta yoqishni so‘rang. - O‘chirilgan biometriya. Agar foydalanuvchi barcha barmoq izlarini o‘chirgan yoki Face ID’ni o‘chirib qo‘ygan bo‘lsa, darhol oddiy kirishga o‘tkazing.
Nimaga tayanmaslik kerak
- Biometriya aniq odamni emas, «ro‘yxatdan o‘tganlardan birini» tasdiqlaydi. Qurilmada oila a’zosining barmoq izi bo‘lishi mumkin.
- Bu birinchi kirishning o‘rnini bosmaydi va kirishni tiklash usuli emas.
- Yirik operatsiyalar uchun (o‘tkazmalar, telefonni almashtirish) server tomonidan tekshiruv qo‘shing: himoyalangan xotiradagi kalit bilan imzo yoki yangi kod.
- Xotirasiz «ha/yo‘q» tekshiruvi root va jailbreak qilingan qurilmalarda oson chetlab o‘tiladi.