Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. Flutter 3.x ve üzeri sürümler, yerel donanım erişimlerinde daha stabil bir yapı sunmaktadır. İhtiyacınız olan temel araçlar şunlardır:
- Flutter SDK (En güncel kararlı sürüm).
- Android için API 23 (Marshmallow) ve üzeri, iOS için ise 10.0 ve üzeri sürüm desteği.
local_authpaketi.- Cihaz üzerinde tanımlanmış bir biyometrik veri (Parmak izi veya Yüz tanıma).
Öncelikle, pubspec.yaml dosyanıza gerekli bağımlılığı ekleyerek işleme başlayalım:
dependencies:
flutter:
sdk: flutter
local_auth: ^2.2.0 # En güncel sürümü kontrol edin
Bu kod bloğu, projenize yerel kimlik doğrulama yeteneklerini kazandıran kütüphaneyi ekler. Paketi ekledikten sonra terminalde flutter pub get komutunu çalıştırarak kurulumu tamamlayın.
Platform Bazlı İzinlerin Yapılandırılması
Biyometrik doğrulama, donanım seviyesinde bir erişim gerektirdiği için her iki mobil platformda da özel izin tanımlamaları yapmanız şarttır. Aksi takdirde uygulamanız çalışma zamanında hata verecektir.
Android tarafında android/app/src/main/AndroidManifest.xml dosyanıza şu satırı ekleyin:
iOS tarafında ise ios/Runner/Info.plist dosyanıza, kullanıcının biyometrik veriyi neden kullanacağınızı açıklayan bir mesaj eklemelisiniz:
NSFaceIDUsageDescription
Uygulamaya giriş yapmak için biyometrik verilerinize ihtiyacımız var.
Bu izinler, işletim sisteminin kullanıcıdan onay almasını sağlar. Güvenlik politikaları gereği, bu açıklamayı net ve dürüst bir şekilde yazmanız uygulama mağazası onay süreçleri için kritiktir.
Biyometrik Doğrulama Servisi Oluşturma
Kodunuzu temiz tutmak ve yönetilebilir kılmak için biyometrik işlemleri ayrı bir servis sınıfında toplamak en iyi yaklaşımdır. Aşağıdaki örnekte, cihazın biyometrik özellikleri destekleyip desteklemediğini kontrol eden bir yapı kuruyoruz.
import 'package:local_auth/local_auth.dart';
class BiometricService {
final LocalAuthentication auth = LocalAuthentication();
Future canAuthenticate() async {
final bool canAuthenticateWithBiometrics = await auth.canCheckBiometrics;
final bool canAuthenticate = canAuthenticateWithBiometrics || await auth.isDeviceSupported();
return canAuthenticate;
}
}
Bu sınıf, uygulamanın biyometrik donanıma sahip olup olmadığını sorgular. isDeviceSupported() metodu, cihazın biyometrik doğrulama yeteneğinin olup olmadığını kontrol eden en güncel yöntemdir.
Adım Adım Kimlik Doğrulama Süreci
Şimdi, kullanıcının kimliğini doğrulayacak olan ana fonksiyonu yazalım. Burada authenticate metodunu kullanarak sistemi tetikleyeceğiz.
Future authenticateUser() async {
try {
return await auth.authenticate(
localizedReason: 'Lütfen giriş yapmak için parmağınızı okutun',
options: const AuthenticationOptions(
biometricOnly: false,
stickyAuth: true,
),
);
} catch (e) {
return false;
}
}
Bu fonksiyon, kullanıcıya sistemin varsayılan biyometrik istemcisini açar. stickyAuth: true parametresi, uygulamanın arka plana atılıp tekrar açılması durumunda kimlik doğrulamanın korunmasını sağlar.
Biyometrik Yöntem Karşılaştırması
Uygulamanızda kullanabileceğiniz yöntemleri ve özelliklerini aşağıdaki tabloda inceleyebilirsiniz:
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| Parmak İzi | Hızlı ve yaygın | Islak/kirli parmakta hata |
| Yüz Tanıma | Temassız ve modern | Düşük ışıkta zorlanabilir |
| PIN/Şifre | Her cihazda çalışır | Güvenlik riski daha yüksek |
Kritik Güvenlik Uyarısı: Biyometrik doğrulama, uygulamanızın "tek" güvenlik katmanı olmamalıdır. Sunucu taraflı doğrulama (token tabanlı) ile desteklenmeli ve hassas işlemler öncesinde mutlaka kullanıcıdan ek onay alınmalıdır. Biyometrik verilerin kendisi uygulama tarafından asla saklanmaz; sadece donanımın döndürdüğü "başarılı/başarısız" sonucu kullanılır.
Sıkça Sorulan Sorular
Biyometrik doğrulama başarısız olursa ne yapmalıyım?
Başarısızlık durumunda kullanıcıya bir hata mesajı göstermek yerine, alternatif bir yöntem (PIN kodu veya şifre) sunarak uygulamanın kilitlenmesini engellemelisiniz.
Uygulamam neden biyometrik istemciyi açmıyor?
Genellikle izinlerin eksik olması veya cihazda tanımlı bir biyometrik verinin (parmak izi kayıtlı değilse) bulunmamasından kaynaklanır. canAuthenticate metodunu kontrol ederek durumu yönetebilirsiniz.
Yüz tanıma ve parmak izini ayırt edebilir miyim?
getAvailableBiometrics() metodunu kullanarak cihazda hangi donanımların aktif olduğunu listeleyebilir ve kullanıcıya özel bir arayüz sunabilirsiniz.
Bu özellik her Android cihazda çalışır mı?
Hayır, cihazın donanım olarak biyometrik sensöre sahip olması gerekir. Ayrıca çok eski Android sürümlerinde destek kısıtlı olabilir.
Güvenlik açısından uygulama içi PIN kullanımı zorunlu mu?
Evet, biyometrik doğrulamanın geçersiz kaldığı veya cihazın donanımsal arıza yaşadığı durumlar için her zaman bir "fallback" (yedek) mekanizması tasarlamanız önerilir.
Gelişmiş Hata Yönetimi ve Kullanıcı Deneyimi Stratejileri
Biyometrik doğrulama süreçlerinde kullanıcıların en sık karşılaştığı sorunlar; cihazın biyometrik veriyi okuyamaması, kullanıcının parmak izi veya yüz verisini daha önce tanımlamamış olması veya sistemin geçici olarak kilitlenmesidir. Bu durumları yönetmek, uygulamanızın profesyonellik seviyesini belirler.
local_auth paketi, doğrulama başarısız olduğunda size spesifik hata kodları döner. Bu kodları yakalayarak kullanıcıya anlamlı geri bildirimler sunmalısınız. Örneğin, kullanıcı biyometrik veriyi henüz tanımlamadıysa, onu doğrudan sistem ayarlarına yönlendiren bir buton göstermek kullanıcı deneyimini (UX) ciddi oranda artırır.
Future authenticateUser() async {
try {
bool authenticated = await auth.authenticate(
localizedReason: 'Giriş yapmak için biyometrik verinizi doğrulayın',
options: const AuthenticationOptions(biometricOnly: true),
);
} on PlatformException catch (e) {
if (e.code == 'NotEnrolled') {
// Kullanıcı cihazda biyometrik veri tanımlamamış
showDialog(
context: context,
builder: (_) => AlertDialog(
title: Text('Biyometrik Veri Bulunamadı'),
content: Text('Lütfen cihaz ayarlarından parmak izi veya yüz tanıma ekleyin.'),
),
);
} else if (e.code == 'LockedOut') {
// Çok fazla hatalı deneme yapıldı
print('Sistem geçici olarak kilitlendi.');
}
}
}
Biyometrik Doğrulama Sürecinde Performans ve Güvenlik İpuçları
Biyometrik doğrulama, uygulamanızın kritik bir geçiş noktasıdır. Performansı optimize etmek ve güvenlik açıklarını minimize etmek için aşağıdaki standartları uygulamanız önerilir:
- Hızlı Erişim: Biyometrik doğrulama ekranını uygulamanın ana ekranında veya kritik işlem (para transferi, profil düzenleme vb.) öncesinde tetikleyerek kullanıcıyı yormadan güvenliği sağlayın.
- Güvenli Depolama Entegrasyonu: Biyometrik doğrulama tek başına bir "kimlik" kanıtı değildir. Başarılı bir doğrulamadan sonra, cihazın güvenli donanımında (Secure Enclave veya TEE) saklanan bir anahtarı veya
flutter_secure_storageiçindeki bir token'ı tetiklemek en güvenli yöntemdir. - Arka Plan İşlemleri: Uygulama arka plana atıldığında veya ekran kilitlendiğinde, biyometrik doğrulama oturumunun süresini (timeout) kontrol edin. Kullanıcının her seferinde tekrar doğrulama yapmasını istemek yerine, belirli bir süre (örneğin 5 dakika) boyunca oturumu açık tutabilirsiniz.
Aşağıdaki tablo, biyometrik doğrulama sırasında karşılaşılan yaygın platform hatalarını ve çözüm yaklaşımlarını özetlemektedir:
| Hata Kodu | Anlamı | Önerilen Aksiyon |
|---|---|---|
| NotAvailable | Donanım desteklenmiyor. | PIN veya şifre ile yedek giriş yöntemine geç. |
| PasscodeNotSet | Cihazda ekran kilidi (PIN/Pattern) yok. | Kullanıcıyı cihaz güvenlik ayarlarına yönlendir. |
| LockedOut | Çok fazla hatalı deneme. | Bir süre beklet veya PIN ile doğrulamayı zorunlu kıl. |
Son olarak, test süreçlerinizi sadece emülatörler üzerinde değil, farklı biyometrik sensörlere sahip (Ultrasonik, Optik, 3D Yüz Tarama) fiziksel cihazlarda gerçekleştirin. Özellikle Android tarafında üretici bazlı özelleştirmeler, biyometrik API'nin davranışını değiştirebileceği için kapsamlı bir cihaz testi zorunludur.
Sonuç
Flutter ile biyometrik kimlik doğrulama, kullanıcı deneyimini iyileştiren ve güvenlik standartlarını yükselten güçlü bir yetenektir. Bu rehberde, local_auth paketinin kurulumundan platform izinlerine ve doğrulama mantığının oluşturulmasına kadar temel adımları tamamladınız. Bir sonraki adım olarak, başarılı doğrulama sonrası sunucuya güvenli bir JWT (JSON Web Token) gönderme sürecini inceleyerek uygulamanızın uçtan uca güvenliğini sağlayabilirsiniz.
Not: Kod güvenliği sorumluluğu geliştiriciye aittir. Hassas verileri işlerken her zaman Flutter'ın flutter_secure_storage gibi güvenli depolama çözümleriyle birlikte biyometrik doğrulama kullanmanız tavsiye edilir.


Yorumlar (0)
Yorum Yaz