Asosiy kontentga o‘tish
Innovialabs

Ilovaga Face ID va barmoq izi orqali kirishni qanday qo‘shish mumkin

Amaliyot3 daq

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 true oladi. 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

  1. Foydalanuvchi birinchi marta oddiy usulda kiradi: telefon va kod, parol yoki Apple/Google.
  2. Ilova Face ID yoki barmoq izi orqali kirishni yoqishni taklif qiladi.
  3. Refresh token biometriya talabi bilan himoyalangan xotiraga saqlanadi.
  4. 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_auth paketi faqat «ha/yo‘q» tekshiruvini beradi. Xotiraga bog‘lash uchun biometrik kirish parametrlari bilan flutter_secure_storage’dan yoki Keystore/Keychain orqali ishlaydigan maxsus paketlardan foydalaning.
  • React Native: expo-local-authentication ham «ha/yo‘q». Tokenni biometriya ostida saqlash uchun accessControl bilan react-native-keychain yoki kalitlar yaratib, ma’lumotlarni imzolaydigan react-native-biometrics mos 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. .biometryCurrentSet va setInvalidatedByBiometricEnrollment(true) bayroqlari bilan yangi biometriya qo‘shilsa, saqlangan sirga kirib bo‘lmaydi, Android’da KeyPermanentlyInvalidatedException paydo 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.

Ko‘p beriladigan savollar

Yo‘q. Biometrik ma’lumotlar qurilmadan chiqmaydi. Server faqat oddiy token yangilash so‘rovini yoki kalit bilan imzoni ko‘radi.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.