Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Authentification biométrique sous MAUI

Pour protéger vos apps oubliez les mots de passe que tout le monde exèdre, passez à la biométrie !

Mettre fin aux mots de passe

Les mots de passe sont l’épine dans le pied de tous les utilisateurs, le maillon faible de tous les efforts de sécurisation en informatique. Il faut les supprimer et vite. Je possède un soft pour classer mes mots de passe, j’y compte plus de 400 entrées et encore en laisse-je beaucoup être gérées par Chrome… C’est infernal. Dernièrement l’une de mes cartes bancaires ne fonctionnait plus pour faire des achats internet. Après appel au centre d’assistance j’ai appris que je devais avoir reçu un … code pour les achats internet à donner en plus du … code SMS qui est envoyé pendant la vérification ! C’est un délire, les informaticiens de cette banque méritent le fouet et leur direction mérite la prison à vie. 

Ne faites pas comme ces incompétents qui n’ont rien compris aux exigences modernes : supprimez les mots de passe de vos apps et sécurisez-les autrement.

Autrement ? Il existe d’autres méthodes, la biométrie sans être parfaite est malgré tout la voie à exploiter puisque toutes les devices récentes savent reconnaitre au moins les visages ou les empreintes. Pas parfait, mais mille fois moins imparfait que des mots passe 1234, à moins qu’ils ne soient directement sur un post-it à côté de l’ordinateur, ou dans le portefeuille !

De plus vous vous rangerez du côté des modernes et vous détacherez d’une concurrence préhistorique qui en sera restée aux mots de passe (ou pire au code supplémentaires après envoi d’un code SMS le tout après avoir tapé tout un tas de codes pour identifier votre CB. Si, ça existe, et ça doit être dénoncé car ces informaticiens qui mettent cela en œuvre sont la honte de notre profession !).

Les préparatifs pour gérer les empreintes

Il n’y a pas grand-chose à faire mais si nous voulons utiliser l’empreinte digitale avec l’émulateur Android il va être nécessaire, avant même de penser à commander cela depuis une App, de faire en sorte que l’émulateur lui-même soit configuré pour une telle utilisation !

L’émulateur n’est pas une vraie device, il ne suffira pas de coller votre doigt sur l’écran de votre PC pour enregistrer une nouvelle empreinte et vous risquez donc fort de vous trouver coincer. Mais je vais vous aider !

Dans un premier temps allez dans l’espace Sécurité de votre émulateur (que vous aurez lancé hors débogue via le gestionnaire d’appareils Android depuis Visual Studio par exemple). 

Grâce à la recherche trouver l’option FingerPrint (ou Imprint finalement plus proche du français empreinte !).

Demandez l’ajout d’une empreinte comme sur n’importe quel smartphone Android. Là où ça va coincer c’est quand l’émulateur va vous demander de placer votre doigt pour enregistrer l’empreinte… Mais pas de panique. En premier lieu il vous aura été demandé de choisir une méthode de blocage car l’empreinte va toujours de pair avec un autre procédé, choisissez par exemple un code PIN que vous mettrez bien entendu à 1234 dans cet exemple (faire un pied de nez à une empreinte est amusant).

Et c’est là que les choses sérieuses commencent, l’émulateur affiche l’écran que vous connaissez peut-être déjà qui demande à appliquer son doigt pour le reconnaitre.

Comment faire ?

En passant par la console ADB !

Premièrement vous allez taper la commande :

ADB devices -l

(c’est la lettre L par un i). Vous obtiendrez la liste des devices connues par exemple :

List of devices attached
emulator-5554          device product:sdk_gphone64_x86_64 model:sdk_gphone64_x86_64 device:emulator64_x86_64_arm64 transport_id:119
emulator-5562          offline transport_id:177

Ici on voit deux devices, une est offline l’autre est active, c’est notre émulateur. Notez bien son ID (emulator-5554).

Ensuite nous allons simuler l’apposition du doigt sur le capteur en envoyant la commande suivante :

adb -s emulator-5554 -e emu finger touch 1155aa1155

Vous noterez qu’après le “-s " c’est l’ID de l’émulateur concerné que nous utilisons, ici celui retourné par la première commande. Chez vous cela sera certainement un autre ID. De même l’empreinte doit posséder un ID. C’est le nombre 1155aa1155. Très honnêtement tous les exemples que j’ai pu consulté utilisent ce nombre sans en donner la raison. Certainement un nombre random mais qui doit suivre un formalisme que j’ai pas pu trouver. En tout cas celui fonctionne. Et je suppose que si on souhaite enregistrer plusieurs empreintes cet ID doit être personnalisé. Mais ici nous nous contenterons d’une seule empreinte.

Mais ce n’est pas fini… le système va vous demander maintenant d’appliquer vraiment votre doigt pour le mesurer.

C’est là qu’il faut déplier les options de l’émulateur et trouver l’option Empreinte. En utilisant l’empreinte 1 et appuyant autant de fois qu’il le faudra, vous arriver au bout de la procédure et l’émulateur vous répondra que l’empreinte est bien enregistrée ! Youpi !

 

Désormais votre émulateur est bloqué par un code PIN (1234) et par une empreinte (la fausse que nous avons générée et qui est accessible via les options de l’émulateur désormais sous le nom de Finger 1, doigt 1.

Ce n’est pas très compliqué mais il vrai que la saisie de l’empreinte dans un émulateur qui n’a pas de détecteur peut dérouter un peu. La méthode n’est pas si complexe mais on est bien content de trouver Dot.Blog pour l’expliquer !

Passons à l’App

Là encore je vais faire simple. Puisque que nous allons partir de l’App MAUI par défaut que je vais à peine modifier.

Pour ce qui est des textes que j’ai changés on s’en moque un peu, faites comme vous voulez c’est purement cosmétique.

Le plugin

Il va falloir utiliser un plugin pour utiliser l’empreinte dans notre application. Il en existe un qui support .NET 6 et qui tournera sans problème sous MAUI. Au moment où j’écris il est toujours en béta, donc pour le voir activer l’affichage des versions préliminaires :

 

Ensuite, tapez « plugin.fingerprint ». Vous aurez l’affichage suivant (bien entendu dans quelques temps le plugin sera peut être passé en mode stable et sa version aura changé, à vous d’adapter…)

 


C’est le premier qu’il faut choisir, donc ignorez celui pour MvvmCross.

Préparer l’App

Le plugin est installé mais ce n’est pas tout. Il faut d’une part demander à Android la permission d’utiliser l’empreinte et ensuite initialiser le plugin. Tout cela se fait dans l’application Android, mais en MAUI on se contente d’ouvrir le dossier Platforms/Android…

Deux fichiers nous intéressent :

AndroidManifest.xml

Il contient notamment les autorisations et nous allons ajoutons l’utilisation du détecteur d’empreinte :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
</manifest>

MainActivity.cs

Le fichier principal de l’activité Android doit lui aussi être modifié pour initialiser le plugin. Le code devient alors le suivant après ajout de OnCreate :

using Android.App;
using Android.Content.PM;
using Android.OS;
using Plugin.Fingerprint;
namespace BioMaui.Platforms.Android;
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        CrossFingerprint.SetCurrentActivityResolver(() => this);
    }
}

Détection de l’empreinte

Nous avons fait pas mal de chose petites choses pour préparer le grand événement… et la conclusion va vous surprendre ! Entre l’App par défaut qui nous a fourni un cadre MAUI complet, y compris le bouton dont nous avions besoin, et les préparatifs de l’émulateur et du code Android, il n’y a plus grand-chose à faire. Juste à code le code behind du bouton de la MainPage !

private async void OnAuthenBtnClickedAsync(object sender, EventArgs e)
{
        var request = new AuthenticationRequestConfiguration("Pas de doigt, 
                   pas d'accès !", "(vous allez en avoir besoin)");
        var result = await CrossFingerprint.Current.AuthenticateAsync(request);
        if (result.Authenticated)
        {
            await DisplayAlert("Authentifié !", "Accès accordé", cancel:"ok" );
        }
        else
        {
            await DisplayAlert("Accès refusé", result.ErrorMessage, "annuler");
        }
    }

Tout se règle en réalité avec une ligne qui demande l’authentification sur la base d’une requête construite juste avant.

Il suffit de lire le résultat et on sait tout de suite si l’utilisateur est autorisé ou non à aller plus loin !

C’est pas génial ça ? 

Avant d’ajouter l’empreinte et de paramétrer l’émulateur le code donne cet affichage :

 


Une fois l’App et le reste bien configuré, le clic sur le bouton doit déclencher l’affichage suivant :

 

C’est là qu’on utilise les options de l’émulateur pour simuler l’envoi de l’empreinte Finger 1 (voir la capture plus haut).

Et dans ce cas, on obtient le glorieux affichage suivant :

 

N’est-ce pas merveilleux ?

Conclusion

Plus de mot de passe, une façon moderne et simple à la fois de sécuriser vos apps, de tranquilliser vos utilisateurs, sans les enquiquiner… Certains devraient en prendre de la graine ! 😊

En tout cas les lecteurs de Dot.Blog savent ce qu’il faut faire maintenant !

Stay Tuned !


Faites des heureux, partagez l'article !
blog comments powered by Disqus