L’authentification biométrique avec TouchID et FaceID

Salut à tous ! Xavier, développeur iOS à Webwag Mobile, de retour pour un nouvel article. Cette fois-ci nous allons voir comment intégrer TouchID et FaceID.

Tout d’abord, il faut savoir que le TouchID n’est disponible qu’à partir de l’iPhone 5s, de l’iPad 5e génération, de l’iPad mini 3 ainsi que sur les iPad Pro et l’iPad Air 2.

Quant au FaceID, celui-ci est disponible sur les iPhone X, XR, XS et XS Max ainsi que sur l’iPad Pro 11 pouces et l’iPad Pro 12,9 pouces de 3e génération.

Le TouchID

Nous allons créer une classe qui implémentera les méthodes pour TouchID et FaceID.

import LocalAuthentication

class LAPolicyAuthenticationManager {

    static func isTouchIDAvailable() -> Bool {

        let context = LAContext()
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
            if #available(iOS 11, *) {
                return context.biometryType == .touchID
            } else {
                return true
            }
        }
        return false
    }

}

1) N’oubliez pas d’importer LocalAuthentication
2) Nous utilisons la méthode canEvaluatePolicy pour savoir si le matériel est compatible et que TouchID est configuré
3) Le if de la ligne 9 doit être ajouté pour vérifier que ce soit bien TouchID, car FaceID est apparu avec iOS 11


Une fois que nous savons si l’utilisateur peut utiliser TouchID, il ne nous reste plus qu’à afficher l’alert. Ajoutez donc cette méthode dans la classe.

static func evaluatePolicy(withReason reason: String, reply: @escaping (Bool, Error?) -> Void) {

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

    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: { (success, error) in
            reply(success, error)
        })
    }
}

1) Le paramètre reason sera la phrase affichée à l’utilisateur dans l’alert
2) La ligne 4 sert à enlever le bouton Mot de passe qui apparait après un échec, il ne nous est pas utile ici

Utilisons donc maintenant ces méthodes dans le viewWillAppear d’un ViewController.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if LAPolicyAuthenticationManager.isTouchIDAvailable() {
        LAPolicyAuthenticationManager.evaluatePolicy(withReason: "Connectez-vous avec TouchID") { (success, error) in
            if success {
                // Identifier l'utilisateur
            } else {
                // Traiter l'erreur
            }
        }
    }
}

Ce qui nous donne donc :

Le FaceID

Tout d’abord, il faut ajouter une ligne dans l’Info.plist.

Ajoutez NSFaceIDUsageDescription et une explication comme Activer le Face ID vous permettra un accès rapide à l’application.

Ensuite, il y a peu de différence d’implémentation qu’avec TouchID.

Rajoutons donc dans notre classe LAPolicyAuthenticationManager la vérification pour savoir si le matériel est compatible et que FaceID est configuré.

static func isFaceIDAvailable() -> Bool {

    let context = LAContext()
    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil),
        #available(iOS 11, *),
        context.biometryType == .faceID {
            return true
    }
    return false
}

Contrairement à TouchID, cette fois nous vérifions à la fois la version d’iOS ET que ce soit bien FaceID.

Pour afficher l’alert, revenons à notre viewWillAppear et changeons le comme ceci :

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if LAPolicyAuthenticationManager.isFaceIDAvailable() {
        LAPolicyAuthenticationManager.evaluatePolicy(withReason: "Connectez-vous avec FaceID") { (success, error) in
            if success {
                // Identifier l'utilisateur
            } else {
               // Traiter l'erreur
            }
        }
    } else if LAPolicyAuthenticationManager.isTouchIDAvailable() {
        LAPolicyAuthenticationManager.evaluatePolicy(withReason: "Connectez-vous avec TouchID") { (success, error) in
            if success {
                // Identifier l'utilisateur
            } else {
                // Traiter l'erreur
            }
        }
    }
}

Nous vérifions maintenant que si FaceID est disponible d’abord, nous vérifions ensuite TouchID.

Ce qui nous donne donc :

Et après ?

En général, vous souhaiterez utiliser l’authentification biométrique pour éviter à l’utilisateur de saisir son mot de passe pour se connecter à une API.

Mais il vous faudra garder un mot de passe ou un token en mémoire ce qui doit être fait soigneusement. Vous pourriez stocker ces données dans le Keychain pour qu’elles soient sécurisées.

 

Conclusion

L’authentification biométrique est une bonne option à proposer à l’utilisateur et qui ne demande pas un trop grand temps de développement.

Articles liés
Introduction à Volley et GSON
Mon avis sur les animations lottie pour Android
DataBinding pour les applications Windows
Récupération de la signature d’un client dans une application

Laissez votre commentaire

Votre commentaire*

Votre Nom*
Votre site internet

quatre × 5 =