Inleiding tot Biometrische Authenticatie op iOS

Biometrische authenticatie is een hoeksteen geworden van moderne mobiele beveiliging, en biedt een evenwicht tussen gemak en bescherming. Voor iOS-ontwikkelaars biedt het LocalAuthentication-kader een eenvoudig maar krachtig API om Touch ID, Face ID en apparaatpascode verificatie te integreren in toepassingen. Dit artikel loopt door het volledige proces van het implementeren van biometrische authenticatie met behulp van lokale authenticatie, van initiële setup tot productie-ready best practices, zodat uw app voldoet aan de hoogste normen van de gebruiker privacy en veiligheid.

Aan het einde van deze gids, zult u begrijpen hoe u biometrische beschikbaarheid controleren, prompt gebruikers voor authenticatie, omgaan met fouten sierlijk, en bieden terugvalmechanismen alle tijdens het volgen van Apple .

Begrip van het lokale identificatiekader

Het LocalAuthentication framework, geïntroduceerd in iOS 8, biedt een uniforme interface voor het evalueren van de gebruikersidentiteit via biometrische gegevens of een apparaatpascode. Het abstracteert de onderliggende hardware verschillen tussen Touch ID en Face ID, zodat u authenticatie logica kunt schrijven die naadloos werkt op alle ondersteunde iOS-apparaten.

De belangrijkste onderdelen van het kader zijn:

  • LAContext: Het centrale object dat het authenticatiebeleid beheert, de redenstrings lokaliseerde en het terugvalgedrag.
  • LAPOlicy: Voorgedefinieerde beleidsmaatregelen die de authenticatiemethode bepalen. De twee meest voorkomende zijn (alleen biometrie) en (biometrie met code-inval).
  • LAFror: Foutcodes die uw app informeren waarom authenticatie niet beschikbaar is, gebruiker geannuleerd, wachtwoord niet ingesteld, en anderen.

Hoewel het kader is eenvoudig te gebruiken, een juiste implementatie vereist zorgvuldige aandacht voor gebruikerservaring, foutafhandeling en beveiliging. Laten we de beleidsopties in meer detail verkennen.

Authenticatiebeleid uitgelegd

  • . Als biometrie (Touch ID of Face ID) is ingeschreven en beschikbaar, dit beleid vraagt de gebruiker alleen voor biometrische verificatie. Als biometrie niet beschikbaar is, de beleidsevaluatie mislukt zonder het aanbieden van een wachtwoord terugval. Dit is geschikt voor operaties met een laag risico waar u een wrijvingsloze ervaring en kan omgaan met het gebrek aan biometrie sierlijk.
  • .Dit beleid probeert eerst biometrische verificatie. Als biometrie niet beschikbaar is, de gebruiker niet inschrijft, of de gebruiker annuleert de biometrische prompt, kan uw app terugvallen op de apparaatpascode. Dit is het aanbevolen beleid voor de meeste authenticatie scenario's omdat het ervoor zorgt dat zelfs wanneer biometrie is geen optie, de gebruiker nog steeds kan authenticeren met behulp van hun wachtwoord.

Het is belangrijk om op te merken dat de val van de wachtwoordencode pas verschijnt nadat de gebruiker de biometrische prompt annuleert of als biometrie mislukt en de gebruiker activeert .Enter Passcode.

Stapsgewijze uitvoering

De implementatie van biometrische authenticatie omvat vijf duidelijke stappen: het importeren van het kader, het creëren van een instantie, het controleren of het gewenste beleid kan worden geëvalueerd, het uitvoeren van de evaluatie, en het verwerken van het resultaat. Hieronder volgt een gedetailleerde uitsplitsing met codevoorbeelden.

1. Het kader importeren

Begin met het importeren van in elk Swift-bestand waar u van plan bent authenticatie te gebruiken. Deze import geeft u toegang tot , en alle fouttypen.

import LocalAuthentication

2. Maak een LAContext aan

is het object dat de systeemstatus query's en de verificatie-evaluatie uitvoert. U kunt optioneel eigenschappen configureren zoals de (het bericht dat aan de gebruiker wordt getoond) en de (de tekst voor de terugvalknop). Bijvoorbeeld, u kunt de terugvaltitel wijzigen in

let context = LAContext()
context.localizedFallbackTitle = "Use Passcode"

3. Controleer de biometrische beschikbaarheid

Voordat u de gebruiker vraagt, moet u controleren of het gekozen beleid kan worden geëvalueerd. Deze controle is essentieel om een abrupte storing te voorkomen die de gebruiker kan verwarren. Gebruik de methode, waarbij u het beleid dat u van plan bent te gebruiken. De methode geeft een Booleaanse waarde terug. Als het terugkeert , zal de parameter (een -aanwijzer) details bevatten over waarom evaluatie niet mogelijk is.

var error: NSError?
let canEvaluate = context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error)

if !canEvaluate {
 // Handle the error – see section on error handling below
 print("Authentication not available: \(error?.localizedDescription ?? "Unknown error")")
 return
}

Veel voorkomende redenen voor falen zijn onder meer: het apparaat ondersteunt geen biometrie, geen vingerafdrukken of gezicht is ingeschreven, de apparaatpascode is niet ingesteld of de app heeft geen recht op Face ID (zie beste praktijken).

4. Evaluatie van het beleid

Zodra u heeft bevestigd dat het beleid kan worden geëvalueerd, bel . De parameter is een tekenreeks die verklaart waarom uw app authenticatie nodig heeft. Deze tekenreeks moet duidelijk en gebruiksvriendelijk zijn omdat deze in de systeemprompt wordt weergegeven. Voor Face ID wordt altijd de reden getoond; voor Touch ID kan deze worden getoond afhankelijk van de configuratie van het apparaat.

context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to access your secure data") { success, evaluateError in
 DispatchQueue.main.async {
 if success {
 // Authentication successful
 print("User authenticated successfully")
 } else {
 // Authentication failed or was cancelled
 print("Authentication failed: \(evaluateError?.localizedDescription ?? "Unknown error")")
 }
 }
}

Merk op dat de voltooiingshandler niet gegarandeerd draait op de hoofdthread. Stuur altijd UI-updates en de daaropvolgende logica naar de hoofdwachtrij, zoals hierboven weergegeven.

5. Het resultaat behandelen

Wanneer de authenticatie slaagt, kunt u met vertrouwen toegang verlenen tot beschermde inhoud of acties. Wanneer het mislukt, moet u de oorzaak bepalen door de te inspecteren. De fout zal van het type zijn, dat is een enum conform . Veel voorkomende gevallen omvatten:

  • .userCancel: De gebruiker tikte
  • .userFallback: The user tapped the fallback button (e.g., “Enter Password”). This triggers the passcode entry if using .deviceOwnerAuthentication, but if you only used .deviceOwnerAuthenticationWithBiometrics, no fallback occurs. In that case, you should present your own passcode entry screen.
  • .biometryNotAvailable: Biometry is not available on this device (e.g., missing hardware). You should switch to passcode-only authentication.
  • .biometryNotEnrolled: No biometric data is enrolled. Prompt the user to set up Touch ID or Face ID in Settings.
  • .biometryLockout: Too many failed attempts; the system has locked biometry. You need to fall back to the passcode. The system passcode will reset the lockout.
  • .passcodeNotSet: The device has no passcode configured. The user must set a passcode for biometry to work. Display an alert directing them to Settings.

Handling each of these cases gracefully is essential for a smooth user experience. For a production app, consider centralising your authentication logic in a manager class and providing clear feedback to the user.

Complete Example with Error Handling

Below is a more complete example that demonstrates a real-world authentication flow. It checks availability, handles errors with appropriate user alerts, and provides a fallback to a custom passcode entry if the user cancels biometry.

import LocalAuthentication
import UIKit

class BiometricAuthManager {
 static let shared = BiometricAuthManager()

 private let context = LAContext()

 func authenticate(completion: @escaping (Bool, String?) -> Void) {
 var error: NSError?
 context.localizedFallbackTitle = "Use Passcode"

 guard context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) else {
 // Determine the reason why authentication is unavailable
 let message = errorMessage(for: error)
 completion(false, message)
 return
 }

 // Possibly show a loading state
 context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to access your account") { success, evaluateError in
 DispatchQueue.main.async {
 if success {
 completion(true, nil)
 } else {
 let message = self.errorMessage(for: evaluateError as? LAError)
 completion(false, message)
 }
 }
 }
 }

 private func errorMessage(for error: LAError?) -> String {
 guard let error = error else {
 return "Authentication could not be completed."
 }
 switch error.code {
 case .biometryNotAvailable:
 return "Biometric authentication is not available on this device."
 case .biometryNotEnrolled:
 return "No biometric data is enrolled. Please set up Face ID or Touch ID in Settings."
 case .biometryLockout:
 return "Too many failed attempts. Please use your passcode to unlock biometrics."
 case .passcodeNotSet:
 return "A device passcode is required to use biometric authentication."
 case .userCancel:
 return "Authentication cancelled by user."
 case .userFallback:
 return "User chose to use the passcode."
 default:
 return "Authentication failed: \(error.localizedDescription)"
 }
 }
}

Deze klasse inkapselt de authenticatielogica en geeft een schoon succes/foutresultaat terug met een gebruiksvriendelijk bericht. Uw view controllers kunnen bellen en daarop reageren.

Beste praktijken en productieoverwegingen

Hoewel de bovenstaande code een solide basis biedt, zullen meerdere aanvullende praktijken ervoor zorgen dat uw implementatie robuust, veilig en gebruiksvriendelijk is.

Altijd een Passcode terugval bieden

Zelfs als u het beleid gebruikt, moet u uw eigen wachtwoordenscherm klaar hebben. Veel gebruikers kunnen geen biometrische gegevens hebben ingeschreven of liever een wachtwoord gebruiken in bepaalde situaties. Apple. Human Interface Guidelines adviseren een duidelijk alternatief voor biometrie te bieden.

Gebruik een Descriptive Gelokaliseerde Reden

De tekenreeks wordt getoond in de systeemprompt. Deze tekenreeks moet beknopt en specifiek zijn voor de actie die de gebruiker op het punt staat toe te staan. Bijvoorbeeld, . .Aanmelden bij uw account . is beter dan een vage . .Authenticatie vereist. . .

Respecteer Gebruikersprivacy

Bewaar biometrische gegevens nooit zelf (vingerafdruksjablonen of gezichtskaarten). Het systeem beheert deze gegevens veilig op de beveiligde enclave. Uw app ontvangt alleen een succes/fout resultaat van Booleaans, niet de werkelijke biometrische gegevens. Probeer deze scheiding niet te omzeilen.

Test op reële apparaten

De simulator heeft beperkte biometrische simulatiemogelijkheden. Test altijd Touch ID en gezichts-ID op de werkelijke iPhones en iPads. Voor Face ID moet je ook de sleutel in je opnemen; anders zal de app crashen wanneer je Face ID probeert te evalueren.

De levenscyclus van de App hanteren

Als uw app biometrische authenticatie gebruikt om een achtergrondstatus te beveiligen, overweeg dan opnieuw te authenticatieren wanneer de app terugkomt naar de voorgrond. U kunt observeren en opnieuw vragen om authenticatie. Echter, vermijd te vaak een veelgebruikt patroon is om herauthenticatie pas na een timeoutperiode te vereisen.

Combineer met Keychain voor Sterkere Veiligheid

Biometrische authenticatie alleen al geeft de gebruiker alleen op het moment van de controle een identiteit weer. Voor de aanhoudende beveiliging (bijvoorbeeld het opslaan van API-tekens), combineer biometrische gegevens met de sleutelhanger. Gebruik de ] klasse met de of vlaggen om ervoor te zorgen dat opgeslagen geheimen alleen toegankelijk zijn na succesvolle biometrische of wachtcode-authenticatie. De sleutelhanger fungeert dan als een veilige kluis die automatisch vergrendelt wanneer het apparaat is vergrendeld.

Terugval na vergrendeling

Wanneer biometrie is vergrendeld vanwege te veel mislukte pogingen, moet u terugvallen op de apparaatpascode. De systeempascode-invoer zal automatisch de biometrische lockout herstellen, dus na een succesvolle toegangscode-ingang, zullen toekomstige biometrische pogingen weer werken. Probeer dit niet te omzeilen; het is een beveiligingsfunctie om te beschermen tegen brute-force aanvallen.

Verschillen tussen Touch ID en Face ID

Hoewel het LocalAuthentication framework de meeste verschillen abstracteert, zijn er een paar nuances om in gedachten te houden:

  • Gelaats-ID vereist een apparaat met een TrueDepth camera. U moet controleren na het bellen om te bepalen welk biometrisch type beschikbaar is. Hiermee kunt u uw labels en pictogrammen voor gebruikersinterfaces aanpassen.
  • Gelaats-ID heeft een hogere gevoeligheid voor reizen.[ De gebruiker moet direct naar het apparaat kijken. Zorg ervoor dat uw uitlegt waarom de app Gezichts-ID nodig heeft.
  • Alternatief uiterlijk voor gezichts-ID: iOS 15.4 en later kunnen gebruikers een alternatieve verschijning (bijvoorbeeld met een bril of een masker) instellen. Uw app hoeft niets speciaals te doen; het systeem behandelt het automatisch.
  • Support met gezichts-ID vragen: Recente iOS-versies ondersteunen het openen van een masker met behulp van de Apple Watch. Voor authenticatie op appniveau kan de standaard Face-ID-prompt nog steeds volledige gezichtsherkenning vereisen, tenzij de gebruiker ervoor gekozen heeft om het masker te gebruiken met Apple Watch. Uw apps zullen dit scenario bestrijken als gevolg van de terugval op de wachtwoorden.

Fout bij het omgaan met diepe duik

We hebben kort gemeenschappelijke fouten behandeld, maar het is de moeite waard om uit te werken hoe je op elk ervan op een gebruiksvriendelijke manier kunt reageren.

Error CodeUser Feedback
biometryNotAvailableShow an alert: “Face ID / Touch ID is not available on this device. Please use your passcode.” Then offer your custom passcode screen.
biometryNotEnrolledPresent an alert that directs the user to Settings > Face ID & Passcode (or Touch ID & Passcode). You can open Settings directly using UIApplication.openSettingsURLString.
biometryLockoutPrompt the user to authenticate using the device passcode. The system passcode entry will reset the lockout. If you use the .deviceOwnerAuthentication policy, the system automatically handles the passcode prompt. If you used .deviceOwnerAuthenticationWithBiometrics, you must fall back to your own passcode entry or invoke the .deviceOwnerAuthentication policy again to trigger the system passcode UI.
passcodeNotSetAlert the user that a device passcode is required. Direct them to Settings to set one. You cannot continue until the passcode is configured.
userCancelSimply dismiss or return to the previous screen. Do not show an error; the user intentionally cancelled.
userFallbackThe user chose the fallback option. Present your own passcode entry screen (or rely on the system passcode if you used the combined policy).

Prestaties en Threading

De methode is asynchrone en blokkeert de hoofddraad niet. Echter, de voltooiingshandler kan worden aangeroepen op een achtergrond draad. Altijd verzenden UI updates naar de hoofdwachtrij. Bovendien, voorkomen dat het maken van een nieuwe ] voor elke authenticatie poging; hergebruik een instantie indien mogelijk, maar wees ervan bewust dat de context ongeldig kan worden na een biometrische vergrendeling of apparaat opnieuw gestart. Als een beste praktijk, maak een nieuwe context voor elke sessie om ervoor te zorgen dat u de nieuwste staat.

Testen van biometrische authenticatie

U kunt biometrische authenticatie simuleren in de iOS Simulator met behulp van het Hardware-menu. Voor Touch ID kunt u kiezen voor . .Touch ID . en vervolgens .Matching Touch . .Niet-matching Touch . . . Voor Face ID , de simulator kunt u een gezicht inschrijven en vervolgens uitvoeren matching of niet-matching pogingen . Echter, sommige scenario's (zoals lockout) zijn niet volledig gesimuleerd. Daarom is echt apparaat testen is onmisbaar.

Daarnaast kunt u Xcode . testplannen gebruiken om unit tests te schrijven rond uw authenticatie manager door de spot te drijven met de . klasse . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

Externe middelen

Voor nadere lezing en officiële documentatie, zie:

Conclusie

Het implementeren van biometrische authenticatie met het LocalAuthentication framework is een eenvoudig proces dat uw iOS-app aanzienlijk verbetert veiligheid houding terwijl het handhaven van een vloeibare gebruikerservaring. Door de beschikbaarheid te controleren, het verwerken van fouten sierlijk, en het verstrekken van betrouwbare terugval opties, kunt u een authenticatiesysteem dat de privacy van de gebruiker respecteert en voldoet aan de strenge richtlijnen van Apple.

Vergeet niet dat biometrische authenticatie slechts één onderdeel is van een uitgebreide beveiligingsstrategie. Combineer het met veilige opslag via de Keychain, netwerkbeveiliging en een goed sessiebeheer om uw gebruikers het hoogste niveau van bescherming te bieden. Met de code en beste praktijken die in dit artikel worden gedeeld, bent u goed uitgerust om Touch ID en Face ID te integreren in uw volgende iOS-project.