HMS FIDO İle Parmak İzi Doğrulaması

Berk Özyurt
Huawei Developers - Türkiye
4 min readJul 1, 2020

Herkese merhaba. Bu yazımda Huawei’nin geliştiricilere sunduğu FIDO servisini kullanarak parmak izi doğrulamasının nasıl yapılabileceğinden bahsedeceğim.

Parmak izi doğrulaması günümüzde bir çok mobil uygulamada kullanılıyor artık. Huawei’nin bu servisi sayesinde tek bir activity içinde üç farklı yöntemle doğrulama yapabilir ve kendi uygulamanızda kolaylıkla kullanabilirsiniz.

FIDO Nedir?

FIDO, uygulamalarda parmak izi kimlik doğrulaması ve 3D yüz kimlik doğrulaması gibi güçlü doğrulama özellikleri sunar. Bu sayede kullanıcılara güvenli ve kullanımı kolay şifresiz kimlik doğrulaması sağlanır.

FIDO iki farklı doğrulama yöntemi sunmaktadır. Birincisi WebAuthn tabanlı istemci ile, ikincisi ise bizim kullanacağımız yöntem olan yerel parmak izi ve 3D yüz kimlik doğrulama ile çalışan BioAuthn.

Geliştirme Adımları

Projenizi HMS Core servislerini kullanımına hazır hale getirmek için HMS ekosisteminden alışkın olduğunuz yöntemler kullanılıyor. Bu yöntemlerin nasıl ilerlediğini artık bir çok yerde rahatlıkla bulabileceğiniz için burada tekrar bahsetmek istemiyorum. Aşağıdaki bağlantı ile bu hazırlık sürecinin nasıl ilerlediğini görebilirisiniz.

  1. Bağımlılıkların ve İzinlerin Eklenmesi
  • Servisi aktif ettikten sonra ve projeye HMS bağımlılıkları eklendikten sonra app dizini altındaki build.gradle dosyasına kütüphane eklenmeli.
dependencies {    
implementation 'com.huawei.hms:fido-bioauthn:4.0.3.300'
}

Böylece projeye BioAuthn SDK’sı eklenmiş oldu. SDK’nın çalışma mantığı aşağıdaki görselde anlatıldığı gibidir. Bu algoritma yardımı ile kodlamaya başlanabilir.

2. XML Dosyasının Oluşturulması

Benim oluşturduğum ekranın görseli ve kodları örnek olması için aşağıdaki gibi. Sizler elbette ihtiyacınıza göre ekranı yeniden şekillendirebilirsiniz.

3. Projenin Kodlaması

  • İlk önce onCreate metodu içinde bir FingerprintManager nesnesi oluşturulmalı ve parmak izi doğrulama işleminin sonucunun gösterilmesi için TextView hazırlanmalı.
private var fingerprintManager: FingerprintManager? = null

private var resultTextView: TextView? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bioauth)
resultTextView = findViewById(R.id.resultTextView)
fingerprintManager = createFingerprintManager()
}
  • Sonuçların hem TextView ile hem de Alert Dialog ile gösterilmesi için showResult isminde bir metot oluşturuyoruz.
private fun showResult(msg: String) {
runOnUiThread {
val builder: AlertDialog.Builder = AlertDialog.Builder(this@BioauthnActivity)
builder.setTitle("Authentication Result")
builder.setMessage(msg)
builder.setPositiveButton("OK", null)
builder.show()
resultTextView!!.append("""$msg""".trimIndent())
}
}
  • Daha sonra onCreate metodu içinde çağırıdğımız createFingerprintManager() metodunu hazırlamalıyız. Bu metot içinde BioAuthnCallback doğrulama işlemini sonucunun başarılı mı yoksa hatalı mı olduğunu tespit ederek sonuçları döndürebiliriz.
private fun createFingerprintManager(): FingerprintManager? {
val callback: BioAuthnCallback = object : BioAuthnCallback() {
override fun onAuthError(errMsgId: Int, errString: CharSequence) {
showResult("Authentication error. errorCode=$errMsgId,errorMessage=$errString")
}

override fun onAuthSucceeded(result: BioAuthnResult) {
showResult("Authentication succeeded. CryptoObject=" + result.cryptoObject)
}

override fun onAuthFailed() {
showResult("Authentication failed.")
}
}
return FingerprintManager(
this,
Executors.newSingleThreadExecutor(),
callback
)
}
  • Eğer doğrulama ile bilrlikte bazı kimlik bilgileri alınacaksa aynı activity içinde bir internal class oluşturarak Cipher nesnesini yaratmalı ve konfigüre etmeliyiz.
  • Son olarak doğrulama işlemlerinin kodlarına geldi sıra. BioAuthn bize üç farklı şekilde doğrulama imkanı sunuyor.
  • Birincisi CryptoObject olmadan, yalnızca parmak izinin geçerli olup olmadığını kontrol ederek doğrulama sağlama yöntemidir. Bu yöntemi gerçekleştiren metot btnFingerAuthenticateWithoutCryptoObjectClicked() ismi ile aşağıda yer almaktadır.
  • İkincisi CryptoObject ile hem parmak izinin geçerliliğini kontrol eden hem de hem de CryptoObject nesnesinin bize sağladığı parametreleri döndüren yöntem. Bu yöntem ile yapılan parmak izi doğrulama işlemini btnFingerAuthenticateWithCryptoObjectClicked() ismi ile aşağıda bulabilirsiniz.
  • Ve son olarak yüz tanıma sistemi ile doğrulama sağlanmaktadır. Bu yöntem şu anda yalnızca Mate 20 Pro ve Mate 30 Pro cihazlarında desteklenmektedir. İlgili metodu btnFaceAuthenticateWithoutCryptoObjectClicked() ismi ile aşağıda bulabilirsiniz.

Böylece parmak izi doğrulama projesi başarıyla tamamlanmış oldu. Cihazınızda çalıştırarak test edebilir ve projenize uygun bir tasarımla parmak izi doğrulama sistemini kolaylıkla kullanabilirsiniz.

Herkese iyi kodlamalar.

Dip Not

  • Parmak izi doğrulama işlemleri yalnızca EMUI 4 (API Level 23) ve üzeri cihazlar için desteklenmektedir.
  • Servisi kullanmadan önce cihazınızda fingerprint özelliği olup olmadığından emin olmalısınız. Eğer böyle bir özellik yoksa servis çalışmayacaktır.
  • Parmak izi doğrularken hata almamak için cihazınızda kayıtlı bir parmak izi olup olmadığını kontrol etmeyi unutmayın. Eğer cihaza parmak izinizi kaydetmediyseniz, servis çalışmayacaktır ve hata alacaksınız.

Referanslar

  • Projenin tüm kaynak kodlarına ve Kotlin ile HMS Kitlerinin kullanım örneklerinin bulunduğu tüm kaynak kodlara aşağıdaki GitHub hesabımdan ulaşabilirsiniz.
  • FIDO ile ilgili Huawei’nin resmi dökümanlarına aşağıdan ulaşabilirsiniz.

--

--