In september 2013 onthulde Apple de nieuwste iPhone met een reeks hardware-verbeteringen. De meest innovatieve functie van iPhone 5s was een dunne metalen band rond de startknop, een vingerafdruksensor genaamd Touch ID. Ontwikkelaars klauteren om te weten over de API. Een jaar later introduceert iOS 8 een nieuw raamwerk waarmee ontwikkelaars de vingerafdruksensor kunnen gebruiken.
De Lokale authenticatie framework biedt methoden om een gebruiker te vragen zich te authenticeren. U zou dit kunnen gebruiken als login voor uw app of om het te gebruiken om gevoelige gegevens binnen een app te beschermen. In deze zelfstudie zal ik de beschikbare opties uitleggen, welke gegevens u van het apparaat kunt krijgen en we zullen ook een voorbeeldapp bouwen.
Deze tutorial vereist Xcode 6 om het project te maken en je hebt een apparaat met Touch ID nodig om de voorbeeldapp die we zullen maken te testen.
Touch ID verwijst naar de vingerafdruksensor die is ingebouwd in de startknop van iPhone 5s. Het is toegevoegd om het gebruik van toegangscodes te bevorderen door het gebruikers gemakkelijker te maken zich te authenticeren. U kunt elk apparaat configureren met maximaal vijf vingerafdrukken. Tot nu toe werd het gebruikt om het apparaat te ontgrendelen en aankopen te doen in de iTunes Store, App Store en iBooks Store. Voordat we zien hoe u het in uw apps kunt gebruiken, vindt u hier een kort overzicht van de sensor zelf.
De Touch ID-sensor kan uw vingers scannen met een resolutie van 500 pixels per inch, zodat elke afdruk in een van de drie categorieën kan worden geplaatst, boog, kronkel of lus. De sensor is ontworpen om echt handig te zijn, je kunt je vinger scannen in elke richting en het zal een overeenkomst met elke bestaande vingerafdruk bepalen, ongeacht de oorspronkelijke oriëntatie.
Apple beweert dat de kans op een vals positief voor een gegeven vingerafdruk 1 op 50.000 is, wat veel beter is dan de kans om een 4-cijferige pincode op 1 op 10.000 te raden. Ze vermelden niet dat het mogelijk is om terug te vallen op het gebruik van het pincode wanneer je je vingerafdrukken niet kunt gebruiken, bijvoorbeeld wanneer je helemaal rimpelig bent na het zwemmen..
Als u Touch ID wilt gebruiken, is het belangrijk dat u ook scenario's in overweging neemt waarbij gebruikers hun vinger niet kunnen gebruiken als verificatiemethode. Omdat u niet kunt verifiëren met de pincode van het apparaat zoals Apple dat doet, is het misschien een goed idee om gebruikers een wachtwoord te laten maken in uw app.
De grootste zorg met de vingerafdruksensor is dat de privacy van gebruikers fundamenteel wordt geschonden. Als uw wachtwoord wordt onthuld, kunt u dit wijzigen in iets nieuws en kan een kwaadwillend persoon het niet langer gebruiken om toegang tot uw gegevens te krijgen. Als je vingerafdruk, of Apple's wiskundige representatie ervan, zichtbaar is, kun je het niet zo gemakkelijk veranderen.
De Lokale authenticatie kader behandelt al het zware opheffen van het verifiëren van gebruikers. Wanneer u met Touch ID werkt, is het belangrijk om te weten dat er geen details over de gebruiker worden weergegeven en dat er geen gegevens worden overgedragen vanaf het apparaat. Ontwikkelaars kunnen het kader echter gebruiken om te controleren of een gebruiker de app mag gebruiken.
Als u bekend bent met de OAuth-specificatie, ziet u wellicht overeenkomsten in de manier waarop verificatie wordt afgehandeld, vraagt u een derde partij om de identiteit van een gebruiker te verifiëren, als u de derde vertrouwt, kunt u hun antwoord gebruiken in plaats van een verzoek in te dienen inloggegevens rechtstreeks van de gebruiker.
LAContext
Het hart van het lokale verificatiekader is het LAContext
klasse. Ontwikkelaars kunnen een instantie van gebruiken LAContext
om een beveiligingsbeleid te evalueren. Op het moment van schrijven is er maar één beleid. Het controleert met behulp van de Touch ID-sensor of de persoon die authenticeert de eigenaar van het apparaat is. In de toekomst kunnen er andere beveiligingsbeleid zijn. Apple kan bijvoorbeeld een niet-bevoorrechte rol introduceren die alleen toegang heeft tot bepaalde bronnen.
Als het framework niet kan worden geverifieerd, wordt er een fout gegenereerd. Er zijn verschillende redenen waarom een apparaat niet kan verifiëren.
LAErrorTouchIDNotAvailable
Het apparaat heeft geen vingerafdruksensor.LAErrorPasscodeNotSet
Er is geen wachtwoordcode ingesteld op het apparaat, wat betekent dat Touch ID is uitgeschakeld.LAErrorTouchIDNotEnrolled
Er is een wachtwoordcode ingesteld maar het apparaat is niet geconfigureerd met vingerafdrukken.Als er een fout wordt gegenereerd met een van de bovenstaande foutcodes, moet u een andere manier opgeven waarop gebruikers zich kunnen authenticeren. Op dit moment kunt u niet alleen vertrouwen op Touch ID.
Laten we een voorbeeldapp maken om te leren hoe we gebruik kunnen maken van het lokale verificatiekader.
Open Xcode en selecteer Nieuw> Project ... van de het dossier menu. Kiezen Toepassing enkele weergave uit de lijst van iOS-applicatie sjablonen en klik volgende.
Voer een naam in voor uw project, ik heb de mijne gebeld Auth. Voer de naam van uw organisatie, het bedrijfsnummer en het klassenprefix in. Kiezen iPhone van de apparaten lijst, klik volgende, en kies een locatie om het project op te slaan.
Klik ViewController.h en definieer een nieuwe actie, authenticateButtonTapped
, die het authenticatieproces zal activeren. De interface van de ViewController
klasse zou er als volgt uit moeten zien:
#importeren@interface ViewController: UIViewController - (IBAction) authenticateButtonTapped: (id) afzender; @einde
Open Main.storyboard en sleep een Knop op het uitzicht van de view controller. Verander het knoplabel om te lezen waarmerken.
Klik met de rechtermuisknop op de knop om de te tonen Verbindingen Inspecteur. Klik op het plusteken links van de Touch Up Inside en selecteer de weergavecontroller die de knop bevat. Er verschijnt een ander menu waarin u de actie kunt selecteren die we zojuist hebben verklaard.
Overschakelen naar ViewController.m implementeren van de authenticateButtonTapped
methode. Voeg aan de bovenkant van het bestand de volgende importinstructie toe voor het lokale verificatiekader.
#importeren
In de authenticateButtonTapped
methode, maken we een context en bepalen we of de context het kan evalueren LAPolicyDeviceOwnerAuthenticationWithBiometrics
beleid, anders een foutmelding weergeven.
- (IBAction) authenticateButtonTapped: (id) afzender LAContext * context = [[LAContext alloc] init]; NSError * error = nil; if ([context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error: & error]) // Authenticate User else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Foutbericht: @" Uw apparaat kan niet verifiëren met TouchID. " delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [alarm show];
Als het LAContext
object kan verifiëren met Touch ID en vervolgens proberen we de identiteit van de gebruiker te verifiëren. Als er geen fout wordt gegenereerd, vertellen we de gebruiker of deze de eigenaar van het apparaat is. De uiteindelijke implementatie van de authenticateButtonTapped
methode wordt hieronder getoond.
- (void) authenicateButtonTapped: (id) afzender LAContext * context = [[LAContext alloc] init]; NSError * error = nil; if ([context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error: & error]) [context evaluationPolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason: @ "Bent u de eigenaar van het apparaat?" antwoord: ^ (BOOL-succes, NSError * -fout) if (fout) UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Foutbericht: @" Er is een probleem opgetreden bij het verifiëren van uw identiteit. " delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [alarm show]; terug te keren; if (succes) UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Geslaagd" bericht: @ "U bent de eigenaar van het apparaat!" delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [alarm show]; else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Foutbericht: @" U bent niet de eigenaar van het apparaat. " delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [alarm show]; ]; else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Foutbericht: @" Uw apparaat kan niet verifiëren met TouchID. " delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [alarm show];
Maak de toepassing op een fysiek apparaat met een vingerafdruksensor en voer deze uit en tik op de knop om te verifiëren. Zolang uw apparaat Touch ID-ondersteuning heeft, moet u worden gevraagd om te verifiëren. Als u uw vinger op de sensor legt, moet de app u vertellen of u de eigenaar van het apparaat bent of niet.
In deze zelfstudie hebben we gekeken naar het Local Authentication-framework dat is geïntroduceerd in iOS 8. Door de identiteit van de authenticerende gebruiker te controleren, wordt de LAContext
klasse stelt gebruikers in staat zichzelf te identificeren zonder gevoelige gegevens rechtstreeks aan de app te verstrekken.