Implementare l’autenticazione biometrica con Flutter

L'autenticazione è un passaggio di verifica importante per diverse app. Soprattutto quando si parla di applicazioni che hanno accesso a dati sensibili, come quelli medici, la sicurezza deve essere una priorità.

Il riconoscimento biometrico tramite Touch ID / Face ID (iOS) o Biometric API (Android) fornisce una garanzia di sicurezza che i metodi tradizionali non avevano. Mentre, infatti, con ID e password si sa solo che una persona possiede quelle informazioni di accesso, col dato biometrico, come l'impronta digitale o la conformazione del volto, si ha una verifica molto più sicura.

L'identificazione biometrica si basa su sistemi hardware per l’acquisizione dei dati cui si integrano le componenti software che consentono, attraverso algoritmi matematici, di effettuare l’analisi dei dati e ricostruire l’identità di una persona e riconoscerla.

 

In E-HCert, l'app per iOS e Android che abbiamo sviluppato per I-Dante (leggi il nostro caso d'uso: E-HCert: la tua cartella clinica a portata di click), l'esigenza è stata quella di proteggere l'accesso all'applicazione e la condivisione dei dati presenti (test clinici, documenti medici, ecc.).

Per garantire ciò ci siamo affidati al package local_auth. Questo consente di gestire l’autenticazione biometrica, tramite volto o impronta, sul dispositivo dialogando con le API native del sistema operativo, (Biometrics API per Android e Local Authentication(LA) per iOS) garantendo la massima sicurezza.

Per cominciare a usare le funzionalità che ci vengono offerte dobbiamo prima integrare il package con le componenti native del sistema.

 

Integrazione Android 

 

1import android.os.Bundle;
2import io.flutter.app.FlutterFragmentActivity;
3import io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin;
4import io.flutter.plugins.localauth.LocalAuthPlugin;
5
6public class MainActivity extends FlutterFragmentActivity {
7    @Override
8    protected void onCreate(Bundle savedInstanceState) {
9        super.onCreate(savedInstanceState);
10        FlutterAndroidLifecyclePlugin.registerWith(
11                registrarFor(
12                        "io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin"));
13        LocalAuthPlugin.registerWith(registrarFor("io.flutter.plugins.localauth.LocalAuthPlugin"));
14    }
15}

 

Integrazione iOS

 

1<key>NSFaceIDUsageDescription</key>
2<string>Why is my app authenticating using face id?</string>

 

Una volta integrato il package possiamo iniziare ad utilizzarlo inserendo un altro blocco di codice per la richiesta di autenticazione dell'app.

 

1import 'package:local_auth/local_auth.dart';
2
3...
4final LocalAuthentication auth = LocalAuthentication();
5bool authenticated = false;
6try {
7 authenticated = await auth.authenticateWithBiometrics(
8  localizedReason: 'Scan your fingerprint to authenticate',
9  useErrorDialogs: true,
10  stickyAuth: false,
11  );
12} on PlatformException catch (e) {
13 ...
14}
15if (authenticated) {
16...
17}

 

Ovviamente non tutti gli smartphone supportano l'autenticazione biometrica o, magari, non tutti la impostano. L'applicazione allora richiede un pin per garantire l'accesso. Il pin viene salvato sul dispositivo in maniera sicura tramite l’uso del package flutter_secure_storage.

 

flut.png

Screeshot iPhone 8 con Touch ID e iPhone 11 con FaceID

 

Come avete visto, con Flutter anche le funzionalità che possono sembrare complesse vengono risolte grazie ad un'infinita disponibilità di pacchetti aggiuntivi. Tutto merito di una community enorme e ampiamente collaborativa!

Contattaci.

Sei interessato a sviluppare un'applicazione in Flutter?

Anche se - semplicemente - vuoi prendere un caffè con noi o vedere la nostra collezione di Action Figures scrivici tramite questo form.

Questo sito è protetto da reCAPTCHA e si applicano le Norme sulla privacy e i Termini di servizio di Google.

Ultimi Articoli