A settembre 2013, Apple ha presentato l'ultimo iPhone con una serie di miglioramenti hardware. La caratteristica più innovativa di iPhone 5s era una sottile striscia di metallo che circondava il pulsante home, un sensore di impronte digitali chiamato Touch ID. Gli sviluppatori si sono arrampicati per conoscere l'API. Un anno dopo e iOS 8 introduce un nuovo framework che offre agli sviluppatori la possibilità di utilizzare il sensore di impronte digitali.
Il Autenticazione locale framework fornisce metodi per richiedere all'utente di autenticarsi. Puoi utilizzarlo come login per la tua app o usarlo solo per proteggere i dati sensibili all'interno di un'app. In questo tutorial, spiegherò le opzioni a tua disposizione, quali dati puoi ottenere dal dispositivo e creeremo anche un'app di esempio.
Questo tutorial richiede Xcode 6 per creare il progetto e avrai bisogno di un dispositivo con Touch ID per testare l'app di esempio che creeremo.
Touch ID si riferisce al sensore di impronte digitali integrato nel pulsante home di iPhone 5s. È stato aggiunto per incoraggiare l'uso dei passcode facilitando l'autenticazione degli utenti. È possibile configurare ciascun dispositivo con un massimo di cinque impronte digitali. Fino ad ora, è stato utilizzato per sbloccare il dispositivo e per effettuare acquisti su iTunes Store, App Store e iBooks Store. Prima di vedere come potresti usarlo nelle tue app, ecco una rapida panoramica del sensore stesso.
Il sensore Touch ID è in grado di scansionare le dita con una risoluzione di 500 pixel per pollice, consentendo di inserire ciascuna stampa in una delle tre categorie, arco, spirale o loop. Il sensore è progettato per essere veramente comodo, puoi scansionare il dito con qualsiasi orientamento e determinerà una corrispondenza con qualsiasi impronta esistente indipendentemente dall'orientamento originale.
Apple sostiene che la probabilità di un falso positivo per una determinata impronta digitale è 1 su 50.000, che è molto meglio delle probabilità di indovinare un codice pin a 4 cifre a 1 su 10.000. Non menzionano che è possibile ricorrere all'utilizzo del numero pin per le volte in cui non si è in grado di utilizzare le impronte digitali, ad esempio, quando si è tutti rugosi dopo il nuoto.
Se prevedi di utilizzare Touch ID, è importante considerare anche gli scenari in cui gli utenti non possono utilizzare il dito come mezzo per l'autenticazione. Poiché non riesci a verificare il codice pin del dispositivo come fa Apple, potrebbe essere una buona idea chiedere agli utenti di creare una password all'interno della tua app.
La più grande preoccupazione con il sensore di impronte digitali è che la privacy degli utenti è fondamentalmente violata. Se la tua password viene rivelata, puoi cambiarla in qualcosa di nuovo e una persona malata non sarebbe più in grado di usarla per accedere ai tuoi dati. Se la tua impronta digitale, o la rappresentazione matematica di Apple, è esposta, non puoi cambiarla abbastanza facilmente.
Il Autenticazione locale quadro gestisce tutto il pesante sollevamento degli utenti di verifica. Quando si lavora con Touch ID, è importante sapere che non rivela alcun dettaglio sull'utente e nessun dato viene trasferito dal dispositivo. Tuttavia, gli sviluppatori possono utilizzare il framework per verificare se un utente è autorizzato a utilizzare l'app.
Se hai familiarità con le specifiche OAuth, potresti notare delle somiglianze nel modo in cui viene gestita l'autenticazione, chiedi a una terza parte di verificare l'identità di un utente, se ti fidi della terza parte, puoi usare la risposta al posto della richiesta credenziali direttamente dall'utente.
LAContext
Il cuore del framework di autenticazione locale è il LAContext
classe. Gli sviluppatori possono utilizzare un'istanza di LAContext
valutare una politica di sicurezza. Al momento della scrittura, c'è solo una politica. Controlla, utilizzando il sensore Touch ID, che la persona che esegue l'autenticazione è il proprietario del dispositivo. In futuro potrebbero esserci altre politiche di sicurezza. Ad esempio, Apple potrebbe introdurre un ruolo non privilegiato che è solo in grado di accedere a determinate risorse.
Se il framework non è in grado di autenticarsi, genera un errore. Esistono diversi motivi per cui un dispositivo non è in grado di autenticarsi.
LAErrorTouchIDNotAvailable
Il dispositivo non ha un sensore di impronte digitali.LAErrorPasscodeNotSet
Non è stato impostato alcun codice di accesso sul dispositivo, il che significa che Touch ID è disabilitato.LAErrorTouchIDNotEnrolled
È presente un codice di accesso, ma il dispositivo non è stato configurato con alcuna impronta digitale.Se viene generato un errore con uno dei codici di errore sopra indicati, è necessario fornire un altro metodo che gli utenti possano autenticare. A questo punto, non puoi fare affidamento esclusivamente su Touch ID.
Creiamo un'app di esempio per imparare come utilizzare il framework di autenticazione locale.
Apri Xcode e seleziona Nuovo> Progetto ... dal File menu. Scegliere Applicazione vista singola dalla lista di Applicazione iOS modelli e clic Il prossimo.
Inserisci un nome per il tuo progetto, ho chiamato il mio auth. Inserisci il nome della tua organizzazione, l'identificativo della società e il prefisso della classe. Scegliere i phone dal dispositivi lista, clicca Il prossimo, e scegliere una posizione per salvare il progetto.
Clic ViewController.h e definire una nuova azione, authenticateButtonTapped
, che attiverà il processo di autenticazione. L'interfaccia del ViewController
la classe dovrebbe assomigliare a questa:
#importare@interface ViewController: UIViewController - (IBAction) authenticateButtonTapped: (id) mittente; @fine
Aperto Main.storyboard e trascinare a Pulsante sulla vista del controller della vista. Cambia l'etichetta del pulsante da leggere Autenticare.
Fare clic con il pulsante destro del mouse sul pulsante per visualizzare Connections Inspector. Fai clic sul segno più a sinistra di Ritocca Dentro evento e selezionare il controller di visualizzazione che contiene il pulsante. Apparirà un altro menu in cui è possibile selezionare l'azione che abbiamo dichiarato un momento fa.
Passa a ViewController.m implementare il authenticateButtonTapped
metodo. Nella parte superiore del file aggiungere la seguente dichiarazione di importazione per il framework di autenticazione locale.
#importare
Nel authenticateButtonTapped
metodo, creiamo un contesto e determiniamo se il contesto può valutare il LAPolicyDeviceOwnerAuthenticationWithBiometrics
politica, altrimenti mostra un messaggio di errore.
- (IBAction) authenticateButtonTapped: (id) sender LAContext * context = [[LAContext alloc] init]; NSError * error = nil; if ([context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics errore: & error]) // Authenticate User else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ Messaggio "Errore": @ "Il tuo dispositivo non può autenticarsi tramite TouchID." delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [avviso spettacolo];
Se la LAContext
l'oggetto è in grado di autenticarsi tramite Touch ID, quindi proviamo a verificare l'identità dell'utente. Se non viene generato alcun errore, comunichiamo all'utente se è il proprietario del dispositivo. L'implementazione finale del authenticateButtonTapped
il metodo è mostrato sotto.
- (void) authenicateButtonTapped: (id) sender LAContext * context = [[LAContext alloc] init]; NSError * error = nil; if ([context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error: & error]) [context evaluationPolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason: @ "Sei il proprietario del dispositivo?" risposta: ^ (errore BOOL, errore NSError * if (errore) UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ Messaggio "Errore": @ "Si è verificato un problema durante la verifica dell'identità." delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [avviso spettacolo]; ritorno; if (successo) UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ Messaggio "Success": @ "Sei il proprietario del dispositivo!" delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [avviso spettacolo]; else Avviso UIAlertView * [[Allocazione UIAlertView] initWithTitle: @ Messaggio "Errore": @ "Non sei il proprietario del dispositivo". delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [avviso spettacolo]; ]; else Avviso UIAlertView * [[Allocazione UIAlertView] initWithTitle: @ Messaggio "Errore": @ "Il tuo dispositivo non può autenticarsi tramite TouchID." delegate: nil cancelButtonTitle: @ "Ok" otherButtonTitles: nil]; [avviso spettacolo];
Crea ed esegui l'applicazione su un dispositivo fisico con un sensore di impronte digitali e tocca il pulsante per l'autenticazione. Finché il tuo dispositivo ha il supporto Touch ID, ti verrà richiesto di autenticarti. Se metti il dito sul sensore, l'app dovrebbe dirti se sei il proprietario del dispositivo o meno.
In questo tutorial, abbiamo esaminato il framework di autenticazione locale introdotto in iOS 8. Controllando l'identità dell'utente che ha effettuato l'autenticazione, il file LAContext
class consente agli utenti di identificarsi senza fornire dati sensibili direttamente all'app.