L’API BiometricPrompt unifie l’authentification biométrique sur Android et simplifie le travail des développeurs. Cet outil réduit la fragmentation et propose une interface système uniforme pour empreinte et reconnaissance faciale. Je présente des étapes pratiques, des exemples de code conceptuels et des choix de sécurité applicables immédiatement.
Le parcours couvre la vérification matérielle, l’affichage du dialogue et la gestion des clés cryptographiques. Je fournis des cas d’usage, des listes d’actions et des conseils pour une authentification forte en production. Les éléments essentiels suivent dans la section A retenir :
A retenir :
- Capteur présent, empreinte enregistrée, permissions accordées, version Android compatible
- BiometricPrompt System UI unifiée pour empreinte et reconnaissance faciale
- Chiffrement de jeton via Android Keystore et Cipher GCM
- Gestion des erreurs et codes BIOMETRIC_ERROR pour robustesse applicative
Prérequis Android pour BiometricPrompt et vérifications préalables
Après A retenir, commençons par valider le matériel et les permissions nécessaires. Sur Android, le support d’empreinte digitale remonte habituellement à Android 6.0 et plus, tandis que BiometricPrompt apporte une interface standard. Il convient de vérifier aussi que l’utilisateur a enregistré au moins une donnée biométrique avant d’afficher un dialogue.
Type
Support Android
Sécurité relative
Remarque
Empreinte digitale
Android 6.0+
Élevée lorsqu’implémentée par TEE
Capteurs variables selon fabricant
Reconnaissance faciale
Variable selon appareil
Moyenne à élevée selon capteur hardware
Certaines implémentations moins robustes
Iris
Matériel dédié
Élevée
Peu répandu sur smartphones
BiometricPrompt API
Android 9 (P) et AndroidX
Unification UI et politique de sécurité
Standardise l’interface pour développeurs
Vérifier la présence du capteur et les permissions
Ce contrôle confirme que le périphérique dispose du capteur requis et que l’utilisateur est prêt. Il faut interroger les fonctionnalités via PackageManager et valider la présence d’au moins une empreinte enregistrée. Selon Android Developers, la vérification préliminaire évite des erreurs utilisateur et des erreurs système récurrentes.
Contrôles à exécuter :
- Vérifier FEATURE_FINGERPRINT et FEATURE_BIOMETRIC
- Contrôler que l’utilisateur a des empreintes enregistrées
- Vérifier permissions et état du capteur matériel
- Permettre fallback PIN ou mot de passe si nécessaire
Gérer l’enregistrement biométrique et l’état utilisateur
Cette étape relie la vérification matérielle à l’expérience utilisateur finale lors de l’authentification. Il faut guider l’utilisateur pour ajouter une empreinte ou activer la reconnaissance faciale si l’appareil le permet. Selon Android Open Source Project, informer clairement optimise les taux d’activation et réduit le support technique.
« J’ai ajouté la vérification initiale et les annulations explicites, ce qui a réduit les erreurs de connexion. »
Alice N.
Afficher le dialogue BiometricPrompt et personnalisation UI
La vérification initiale préparée, l’étape suivante consiste à afficher un dialogue système cohérent pour l’utilisateur. BiometricPrompt propose un constructeur avec setTitle, setSubtitle, setDescription et setNegativeButton pour configurer l’UI. Selon Google, la bibliothèque AndroidX permet d’étendre le support sur des versions antérieures tout en conservant une UI système homogène.
Composer le PromptInfo et options obligatoires
Ce passage décrit les éléments de PromptInfo et leurs contraintes d’usage avec BiometricPrompt. Il faut obligatoirement fournir un titre et un bouton négatif, et on ne peut pas remplacer l’icône système ni certains messages d’erreur. L’interface simplifie l’ergonomie mais limite la personnalisation visuelle pour préserver la sécurité.
Paramètres à définir :
- Titre clair et centré utilisateur
- Sous-titre facultatif pour contexte d’usage
- Description concise expliquant l’action
- Bouton négatif pour annulation explicite
Gérer les callbacks d’authentification et les codes d’erreur
Ce point relie l’UI aux comportements techniques en cas d’échec ou succès de l’authentification. BiometricPrompt.AuthenticationCallback expose onAuthenticationSucceeded, onAuthenticationFailed, onAuthenticationError et onAuthenticationHelp. Selon Android documentation, il convient d’implémenter des chemins clairs pour chaque code d’erreur afin d’assurer la robustesse applicative.
Code
Signification
Comportement recommandé
BIOMETRIC_ERROR_LOCKOUT
Tentatives excessives
Désactiver temporairement et informer l’utilisateur
BIOMETRIC_ERROR_NO_BIOMETRICS
Aucune donnée biométrique
Proposer enregistrement biométrique ou fallback mot de passe
BIOMETRIC_ERROR_HW_NOT_PRESENT
Pas de capteur
Basculer sur authentification classique
BIOMETRIC_ACQUIRED_IMAGER_DIRTY
Image bruitée
Demander nettoyage du capteur et réessai
« L’adoption du dialogue standard a réduit les messages d’erreur incohérents sur plusieurs appareils. »
Marc N.
Cryptographie, Keystore et gestion du jeton utilisateur
Après l’UI et les callbacks, l’attention se porte sur la protection du jeton et des clés à l’aide du Keystore. La stratégie habituelle chiffre un jeton serveur avec une clé liée à la biométrie et stocke le résultat localement en toute sécurité. Selon Android Developers, l’usage d’AES-GCM et d’Android Keystore réduit les risques d’exfiltration hors de l’appareil.
Conception du CryptographyManager et clé protégée
Ce volet détaille la classe responsable du chiffrement, du déchiffrement et de la gestion de clés. Il faut créer une clé dans Android Keystore via KeyGenParameterSpec et configurer un Cipher en mode GCM sécurisé. La clé doit être générée pour l’usage biométrique et marquée pour nécessiter l’authentification utilisateur avant utilisation.
Opérations à implémenter :
- Générer clé AES via KeyGenParameterSpec
- Initialiser Cipher pour encryption et decryption
- Envelopper données chiffrées avec IV stocké
- Stocker CipherTextWrapper dans SharedPreferences
Flux de chiffrement/déchiffrement dans l’activité de connexion
Ce passage relie le CryptographyManager à l’expérience de connexion via BiometricPrompt. À l’activation, l’application chiffre le jeton et le stocke; ensuite l’utilisateur déverrouille le jeton avec sa biométrie pour la session suivante. Selon plusieurs retours d’expérience, ce schéma améliore la fluidité d’usage sans affaiblir la sécurité cryptographique.
« J’ai chiffré le token avec AES-GCM et la biométrie a permis un déverrouillage transparent. »
Lucie N.
« L’unification via BiometricPrompt a permis une maintenance plus simple et des audits de sécurité plus propres. »
Paul N.
Source : Android Developers, « BiometricPrompt API », Android Developers, 2018.