Een Android-handleiding voor vingerafdrukauthenticatie

Vingerafdrukauthenticatie maakt gebruik van de aanraaksensor die in veel Android-toestellen is ingebouwd om de gebruiker te identificeren en toegang te verlenen tot zowel het toestel als toepassingsfunctionaliteit, zoals in-app betalingsopties. De implementatie van vingerafdrukauthenticatie is een meerstappenproces dat in eerste instantie overweldigend kan lijken. Wanneer het proces echter wordt opgesplitst in afzonderlijke stappen, wordt het veel minder complex. In basistermen is vingerafdrukauthenticatie in de eerste plaats een kwestie van encryptie met een sleutel, een cijfer om de encryptie uit te voeren en een vingerafdrukmanager om het authenticatieproces af te handelen.

Dit hoofdstuk biedt zowel een overzicht van vingerafdrukauthenticatie als een gedetailleerde, stap voor stap tutorial die een praktische benadering van de implementatie demonstreert.

Inhoud

Een overzicht van vingerafdrukauthenticatie

Er zijn in wezen 10 stappen voor het implementeren van vingerafdrukauthenticatie binnen een Android-app. Deze stappen kunnen als volgt worden samengevat:

1. Vraag toestemming voor vingerafdrukauthenticatie in het projectmanifestbestand.

2. Controleer of het vergrendelscherm van het apparaat waarop de app wordt uitgevoerd, is beveiligd met een PIN, patroon of wachtwoord (vingerafdrukken kunnen alleen worden geregistreerd op apparaten waarop het vergrendelscherm is beveiligd).

3. Controleer of ten minste één vingerafdruk op het apparaat is geregistreerd.

4. Maak een instantie van de klasse FingerprintManager.

5. Gebruik een instantie van de Keystore om toegang te krijgen tot de Android Keystore-container. Dit is een opslagruimte die wordt gebruikt voor de veilige opslag van cryptografische sleutels op Android-toestellen.

6. Genereer een encryptiesleutel met behulp van de KeyGenerator klasse en sla het op in de Keystore container.

7. Initialiseer een instantie van de Cipher klasse met behulp van de sleutel gegenereerd in stap 5.

8. Gebruik de Cipher instantie om een CryptoObject te maken en wijs het toe aan de FingerprintManager instantie gemaakt in stap 4.

9. Roep de authenticate methode van de FingerprintManager instantie op.

10. Implementeer methoden voor het afhandelen van de callbacks die door het authenticatieproces worden geactiveerd. Geef toegang tot de beschermde inhoud of functionaliteit na een succesvolle authenticatie.

Elke van de bovenstaande stappen wordt in meer detail behandeld in de tutorial die in de rest van dit hoofdstuk wordt beschreven.

deze advertentie rapporteren

Het vingerafdrukauthenticatieproject maken

Begin dit voorbeeld door de Android Studio-omgeving te starten en een nieuw project te maken, waarbij u FingerprintDemo invoert in het veld Toepassingsnaam en ebookfrenzy.com als instelling voor het bedrijfsdomein voordat u op de knop Volgende klikt.

In het scherm Vormfactoren schakelt u de optie Telefoon en Tablet in en stelt u de minimale SDK-instelling in op API 23: Android 6.0 (Marshmallow). Doorloop de installatieschermen en vraag om een lege activiteit te maken met de naam FingerprintDemoActivity en een bijbehorende lay-out met de naam activity_fingerprint_demo.

Vingerafdrukauthenticatie van apparaat configureren

Vingerafdrukauthenticatie is alleen beschikbaar op apparaten met een aanraaksensor en waarop de juiste configuratiestappen zijn uitgevoerd om het apparaat te beveiligen en ten minste één vingerafdruk te registreren. Raadpleeg het hoofdstuk Gebruik en configuratie van de Android Studio 2 AVD-emulator voor stappen over het configureren van een emulatorsessie om vingerafdrukauthenticatie te testen.

Om vingerafdrukauthenticatie op een fysiek apparaat te configureren, begint u met het openen van de app Instellingen en selecteert u de optie Beveiliging. Selecteer in het scherm Beveiligingsinstellingen de optie Vingerafdruk. Op het resulterende informatiescherm klikt u op de knop Doorgaan om door te gaan naar het instelscherm voor vingerafdruk. Voordat de vingerafdrukbeveiliging kan worden ingeschakeld, moet een back-upmethode voor schermontgrendeling (zoals een PIN-code) worden geconfigureerd. Klik op de knop Schermvergrendeling instellen als het vergrendelscherm nog niet beveiligd is en volg de stappen om een PIN, patroon of wachtwoordbeveiliging te configureren.

Met het vergrendelscherm beveiligd, gaat u naar het vingerafdrukdetectiescherm en raakt u de sensor aan wanneer daarom wordt gevraagd (Afbeelding 62-1), waarbij u het proces herhaalt om indien nodig extra vingerafdrukken toe te voegen.

Figuur 62-1

De vingerafdruktoestemming toevoegen aan het manifestbestand

Vingerafdrukauthenticatie vereist dat de app de toestemming USE_FINGERPRINT aanvraagt in het manifestbestand van het project. Zoek en bewerk binnen het Android Studio Project tool venster het app -> manifests -> AndroidManifest.xml bestand om het toestemmingsverzoek als volgt toe te voegen:

Het downloaden van het vingerafdruk pictogram

Google levert een standaard pictogram (Figuur 62-2) dat moet worden weergegeven wanneer een app authenticatie van een gebruiker vraagt.

Figuur 62-2

Een kopie van dit pictogram kan worden gedownload van de volgende URL:

Open de bestandssysteemnavigator voor uw besturingssysteem, selecteer de zojuist gedownloade afbeelding en druk op Ctrl-C (Cmd-C op Mac OS X) om het bestand te kopiëren. Keer terug naar Android Studio, klik met de rechtermuisknop op de map app -> res -> drawable en selecteer de menuoptie Plakken om een kopie van het afbeeldingsbestand aan het project toe te voegen. Wanneer het Kopieer dialoog verschijnt, klik op de OK knop om de standaard instellingen te gebruiken.

Ontwerpen van de gebruikersinterface

Om het voorbeeld zo eenvoudig mogelijk te houden, zullen de enige elementen in de gebruikersinterface een TextView en een ImageView zijn. Zoek en selecteer het activity_fingerprint_demo.xml layout resource bestand om het in de Designer tool te laden. Eenmaal geladen, verwijder het voorbeeld TextView object, sleep een ImageView object van het paneel en plaats het in het midden van het layout canvas.

In het paneel Eigenschappen zoekt u het kenmerk src, klikt u in het overeenkomstige tekstveld en vervolgens op de knop in Figuur 62-3 om het dialoogvenster Resources weer te geven:

Figuur 62-3

Vanuit het linkerpaneel van het dialoogvenster selecteert u de optie Drawable. Voer in het hoofdpaneel ic_fp in het zoekvak in, zoals geïllustreerd in figuur 62 4, om het vingerafdrukpictogram te vinden. Selecteer het pictogram in het dialoogvenster en klik op OK om het toe te wijzen aan het object ImageView.

Figuur 62-4

Localiseer het object Grote tekst in het palet en sleep het zo dat het onder het object ImageView komt te staan. Dubbelklik op het object en verander de tekst zodat er “Touch Sensor” staat. Gebruik het gloeilamp-icoon om de string te extraheren naar een resource met de naam touch_sensor.

Als bovenstaande stappen zijn voltooid, moet de lay-out overeenkomen met die in figuur 62-5:

Figuur 62-5

Toegang tot de services Keyguard en Fingerprint Manager

Vingerafdrukauthenticatie maakt gebruik van twee systeemservices in de vorm van de KeyguardManager en de FingerprintManager. Bewerk de methode onCreate in het bestand FingerprintDemoActivity.java om als volgt verwijzingen naar deze twee services te verkrijgen:

package com.ebookfrenzy.fingerprintdemo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.app.KeyguardManager;import android.hardware.fingerprint.FingerprintManager;public class FingerprintDemoActivity extends AppCompatActivity { private FingerprintManager fingerprintManager; private KeyguardManager keyguardManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fingerprint_demo); keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE); }}

De beveiligingsinstellingen controleren

Eerder in dit hoofdstuk zijn stappen ondernomen om het vergrendelscherm te configureren en vingerafdrukken te registreren op het apparaat of de emulator waarop de app getest gaat worden. Het is echter belangrijk om defensieve code in de app op te nemen om er zeker van te zijn dat aan deze vereisten is voldaan voordat wordt geprobeerd om vingerafdrukauthenticatie te zoeken. Deze stappen worden uitgevoerd in de onCreate methode in het bestand FingerprintDemoActivity.java, waarbij gebruik wordt gemaakt van de Keyguard en Fingerprint manager services. Merk op dat ook code is toegevoegd om te controleren of de USE_FINGERPRINT-toestemming is geconfigureerd voor de app:

De bovenstaande codewijzigingen beginnen met het gebruik van de Keyguard-manager om te controleren of een back-up schermontgrendelingsmethode is geconfigureerd (met andere woorden een PIN of andere authenticatiemethode kan worden gebruikt als alternatief voor vingerafdrukauthenticatie om het scherm te ontgrendelen). In het geval dat het vergrendelingsscherm niet is beveiligd, meldt de code het probleem aan de gebruiker en keert terug van de methode.

De vingerafdrukmanager wordt vervolgens gebruikt om te controleren of ten minste één vingerafdruk op het apparaat is geregistreerd, waarbij opnieuw het probleem wordt gemeld en zo nodig van de methode wordt teruggekeerd.

Toegang tot de Android Keystore en KeyGenerator

Een deel van het vingerafdrukauthenticatieproces omvat het genereren van een coderingssleutel die vervolgens veilig op het apparaat wordt opgeslagen met behulp van het Android Keystore-systeem. Voordat de sleutel kan worden gegenereerd en opgeslagen, moet de app eerst toegang krijgen tot de Keystore. Een nieuwe methode genaamd generateKey zal nu worden geïmplementeerd in het FingerprintDemoActivity.java bestand om de sleutel generatie en opslag taken uit te voeren. In eerste instantie wordt alleen de code om toegang te krijgen tot de Keystore toegevoegd:

Een verwijzing naar de Keystore wordt verkregen door de getInstance methode van de Keystore klasse aan te roepen en de identifier van de standaard Android keystore container (“AndroidKeyStore”) door te geven. De volgende stap in de tutorial is het genereren van een sleutel met behulp van de KeyGenerator service. Voordat deze sleutel wordt gegenereerd, moet code worden toegevoegd om een verwijzing naar een instantie van de KeyGenerator te verkrijgen, met als argumenten het type sleutel dat moet worden gegenereerd en de naam van de Keystore container waarin de sleutel moet worden opgeslagen:

Generating the Key

Nu we een verwijzing naar de Android Keystore container en een KeyGenerator instantie hebben, is de volgende stap het genereren van de sleutel die zal worden gebruikt om een cijfer voor het encryptieproces te maken. Resterend binnen het FingerprintDemoActivity.java bestand, voeg deze nieuwe code als volgt toe:

De bovenstaande veranderingen vereisen enige uitleg. Na het importeren van een aantal aanvullende modules verklaart de code een string variabele die de naam vertegenwoordigt (in dit geval “voorbeeld_key”) die zal worden gebruikt bij het opslaan van de sleutel in de Keystore container.

Volgende, de keystore container wordt geladen en de KeyGenerator geïnitialiseerd. Dit initialisatie proces maakt gebruik van de KeyGenParameterSpec.Builder klasse om het type sleutel te specificeren dat wordt gegenereerd. Dit omvat het verwijzen naar de naam van de sleutel, het configureren van de sleutel zodat deze zowel voor encryptie als decryptie kan worden gebruikt, en het instellen van verschillende encryptie parameters. De setUserAuthenticationRequired methodeoproep configureert de sleutel zo dat de gebruiker elk gebruik van de sleutel moet autoriseren met een vingerafdrukauthenticatie. Zodra de KeyGenerator is geconfigureerd, wordt deze gebruikt om de sleutel te genereren via een oproep aan de generateKey methode van de instantie.

Initialiseren van het cijfer

Nu de sleutel is gegenereerd, is de volgende stap het initialiseren van het cijfer dat zal worden gebruikt om de versleutelde FingerprintManager.CryptoObject instantie te maken. Dit CryptoObject zal op zijn beurt gebruikt worden tijdens het authenticatieproces van de vingerafdruk. Cipher configuratie houdt in dat een Cipher instantie wordt verkregen en geïnitialiseerd met de sleutel die opgeslagen is in de Keystore container. Voeg een nieuwe methode genaamd cipherInit toe aan het bestand FingerprintDemoActivity.java om deze taken uit te voeren:

De methode getInstance van de Cipher klasse wordt aangeroepen om een Cipher instantie te verkrijgen die vervolgens wordt geconfigureerd met de eigenschappen die nodig zijn voor vingerafdrukauthenticatie. De eerder gegenereerde sleutel wordt dan uit de Keystore container gehaald en gebruikt om de Cipher instantie te initialiseren. Fouten worden overeenkomstig afgehandeld en een waar of onwaar resultaat wordt teruggegeven op basis van het al dan niet slagen van het cipher initialisatie proces.

Het werk is nu voltooid aan zowel de generateKey en cipherInit methodes. De volgende stap is het aanpassen van de onCreate methode om deze methoden aan te roepen en, in het geval van een succesvolle cipher initialisatie, een CryptoObject instantie te creëren.

Creëren van de CryptoObject Instance

Verblijvend in de FingerprintDemoActivity.java bestand, wijzig de onCreate methode om de twee nieuw aangemaakte methoden aan te roepen en het CryptoObject als volgt te genereren:

De laatste taak in het project is het implementeren van een nieuwe klasse om de eigenlijke vingerafdruk authenticatie af te handelen.

Implementeren van de Fingerprint Authentication Handler Class

Tot nu toe in dit hoofdstuk heeft het meeste werk te maken met de voorbereiding van de vingerafdruk authenticatie in termen van de sleutel, het cijfer en het crypto object. De eigenlijke authenticatie gebeurt via een aanroep van de authenticate methode van de FingerprintManager instantie. Deze aanroep zal echter één van een aantal callback-events activeren, afhankelijk van het succes of het falen van de authenticatie. Zowel de authenticate method call als de callback handler methodes moeten geïmplementeerd worden in een klasse die de FingerprintManager.AuthenticationCallback klasse uitbreidt. Een dergelijke klasse moet nu worden toegevoegd aan het project.

Navigeer naar de app -> java -> com.ebookfrenzy.fingerprintdemo entry binnen het Android Studio Project tool venster en klik er met de rechtermuisknop op. Selecteer in het resulterende menu de optie New -> Java Class om het Create New Class dialoogvenster weer te geven. Geef de klasse de naam FingerprintHandler en klik op de OK knop om de klasse te maken.

Bewerk het nieuwe klasse-bestand zodat het FingerprintManager.AuthenticationCallback, importeert een aantal aanvullende modules en implementeert een constructor methode die de toepassing context zal worden doorgegeven wanneer een instantie van de klasse wordt gemaakt (de context zal worden gebruikt in de callback methoden om de gebruiker op de hoogte van de authenticatie status):

package com.ebookfrenzy.fingerprintdemo;import android.Manifest;import android.content.Context;import android.content.pm.PackageManager;import android.hardware.fingerprint.FingerprintManager;import android.os.CancellationSignal;import android.support.v4.app.ActivityCompat;import android.widget.Toast;public class FingerprintHandler extends FingerprintManager.AuthenticationCallback { private CancellationSignal cancellationSignal; private Context appContext; public FingerprintHandler(Context context) { appContext = context; }}

Volgende een methode moet worden toegevoegd die kan worden opgeroepen om de vingerafdruk authenticatie te starten. Wanneer deze methode wordt aangeroepen, moeten de instanties FingerprintManager en CryptoObject worden doorgegeven. Noem deze methode startAuth en implementeer ze in het FingerprintHandler.java class bestand als volgt (merk op dat ook code is toegevoegd om nogmaals te controleren of vingerafdruk permissie is verleend):

Volgende, voeg de callback handler methodes toe, die elk zijn geïmplementeerd om een toast bericht weer te geven met het resultaat van de vingerafdruk authenticatie:

De laatste taak voor het testen van het project is om de onCreate methode aan te passen, zodat het een nieuwe instantie van de FingerprintHandler class aanmaakt en de startAuth methode aanroept. Bewerk het bestand FingerprintDemoActivity.java en pas het einde van de onCreate methode aan zodat het als volgt luidt:

Testen van het Project

Nu het project compleet is, start de app op een fysiek Android apparaat of een emulator sessie. Eenmaal draaiend, raak de vingerafdruk sensor aan of gebruik het uitgebreide controle paneel in de emulator om een vingerafdruk aanraking te simuleren zoals beschreven in het hoofdstuk getiteld Gebruik en configuratie van de Android Studio 2 AVD Emulator. Ervan uitgaande dat een geregistreerde vingerafdruk wordt gedetecteerd, verschijnt een toastbericht dat aangeeft dat de authenticatie is geslaagd, zoals getoond in Afbeelding 62-6:

Figuur 62-6

Stop de draaiende app en start deze opnieuw, ditmaal met een niet-geregistreerde vingerafdruk om de authenticatie te proberen. Deze keer zou er een toastbericht moeten verschijnen dat aangeeft dat de verificatie is mislukt.

Samenvatting

Vingerafdrukverificatie binnen Android is een proces dat uit meerdere stappen bestaat en in eerste instantie complex kan lijken. Wanneer het echter wordt opgesplitst in afzonderlijke stappen, wordt het proces duidelijker. Vingerafdruk-authenticatie omvat het gebruik van sleutels, ciphers en sleutel-opslag gecombineerd met de mogelijkheden van de FingerprintManager klasse. Dit hoofdstuk geeft een inleiding tot deze stappen en werkt door de oprichting van een voorbeeld applicatieproject bedoeld om de praktische implementatie van vingerafdrukauthenticatie binnen Android te tonen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.