Configuration de l’authentification par numéro de téléphone
Présentation
Avant-propos
L’activation de l’authentification par numéro de téléphone sur une instance Publik aura pour conséquence que certains comptes utilisateurs créés ne déclareront pas d’adresse courriel. Cette activation doit être précédée par une étude des démarches existantes sur l’instance, pour s’assurer que les démarches sont configurées de façon à supporter cette absence de courriel pour certains usagers de Publik.
Fonctionnalités disponibles
Le module de gestion d’identités Authentic offre la possibilité aux usagers de s’authentifier à l’aide de leur numéro de téléphone (par opposition à une adresse courriel ou un identifiant (username)).
Cela signifie qu’en plus de son mot de passe, l’usager précise à la connexion son numéro de téléphone qui sert alors d’identifiant pour Authentic. Du point de vue de l’usager, recourir à un numéro de téléphone comme identifiant implique de prouver la détention de ce numéro par l’usager. Cette preuve est apportée à Authentic par l’envoi d’un code par SMS, au numéro supposément détenu par l’usager, afin que ce dernier saisisse ce code dans un formulaire de validation prévu à cet effet sur Authentic.
Les parcours usagers qui gravitent autour de cette authentification sont accessibles depuis la page “Mon compte” d’Authentic, ils sont les suivants :
- Création du compte de l’usager à l’aide du numéro de téléphone,
- Changement de mot de passe,
- Récupération de compte en cas de mot de passe oublié,
- Changement d’identifiant (lorsque celui-ci est effectivement le numéro de téléphone de l’usager),
- Vérification d’un numéro de téléphone déclaré (mais dont la preuve de détention n’a pas encore été effectuée),
- Suppression du compte.
Une partie de ces fonctionnalités requièrent la vérification, à l’instant t, de la détention du numéro par l’usager, et ceci par envoi d’un nouveau code SMS. Toutes les actions qui mènent à l’envoi d’un code SMS sont régies par du ratelimiting, c’est-à-dire que Publik pose une limite de fréquence envoi de SMS, à la fois par numéro de téléphone saisi et par adresse IP depuis laquelle l’action est menée. La période entre deux envois n’ayant pas abouti à une vérification croît de façon exponentielle (selon les règles du ratelimiting), notamment afin de prévenir les attaques par déni de service.
Activation de l’authentification par numéro de téléphone
L’authentification est gérée, dans le backoffice Authentic, par le moyen d’authentification “Mot de passe” (voir /manage/authenticators/ sur l’instance concernée).
Pour accéder à ce paramétrage de l’authentification par numéro de téléphone via ce moyen d’authentification, il convient au préalable de poser le feature flag A2_ALLOW_PHONE_AUTHN_MANAGEMENT en tant que setting Django d’Authentic. Une fois chose faite, l’onglet “Avancé” du paramétrage du moyen d’authentification affiche trois nouveaux champs :
- une case à cocher permettant de (dés)activer l’authentification à l’aide de l’adresse courriel de l’usager,
- une case à cocher permettant de (dés)activer l’authentification à l’aide du numéro de téléphone de l’usager,
- lorsque l’authentification par numéro de téléphone est activée, une liste permettant de choisir lequel des attributs de profil existants et de type téléphone est utilisé pour l’authentification. Attention, la modification de l’attribut utilisé pour l’authentification ré-initialise l’état de validation des numéros de téléphone des usagers. Cette modification est pensée pour l’initialisation de la configuration d’une plateforme Publik vierge. Cette modification sur une plateforme existante et déjà configurée pour l’authentification par numéro de téléphone peut dégrader le fonctionnement de cette authentification.
Par ailleurs, l’instance Publik qui se voit activer l’authentification par numéro de téléphone doit définir un connecteur de type “Plateforme d’envoi de SMS” Link: /pour-aller-plus-loin/liste-des-connecteurs/ ainsi que la configuration transversale adéquate dans Hobo Link: /admin-fonctionnel/parametrage-avance/parametres-transversaux-dans-hobo-2/#sms .
Déroulement de l’authentification par numéro de téléphone
Une fois l’authentification par numéro de téléphone activée dans le moyen d’authentification “Mot de passe” (voir supra), la mire de connexion locale d’Authentic change d’intitulé.
L’usager peut alors y saisir un numéro de téléphone, soit au format local (par exemple dix chiffres commençant par “06” ou “07” pour un numéro local français), soit au format international (par exemple commençant “+33” pour les numéros français au format international).
Dans le cas d’un numéro local, c’est le préfixe international par défaut (voir infra, “Paramétrage avancé via les settings Django”) qui est utilisé pour la résolution du numéro en son format international univoque.
Création de compte
Comme mentionné plus haut, la création se compte avec numéro de téléphone nécessite la vérification de ce dernier. L’usager saisit son numéro de téléphone, en choisissant le préfixe international pertinent dans une liste de préfixes supportés par l’instance (la liste configurable, voir plus bas “Paramétrage avancé […]”).
Une fois son numéro saisi, il se voit redirigé vers un formulaire (dont l’URL, opaque, est confidentielle et ne doit pas être transmise à un tiers) pour la saisie d’un code de 8 caractères de long reçu par SMS au numéro déclaré. L’usager dispose de deux minutes pour saisir son code.
Une fois le code correctement reporté dans le formulaire, le compte est créé et l’usager se voit redirigé vers une page de finalisation de création, permettant de déclarer ses informations de profil (en fonction du paramétrage de profil de l’instance, typiquement son nom, son prénom, éventuellement son adresse, etc.) ainsi qu’un mot de passe à utiliser pour ses prochaines connexions.
Changement de mot de passe
Le changement de mot de passe de l’usager connecté (à ne pas confondre avec la récupération de compte non accessible pour cause de mot de passe oublié, voir infra) peut requérir une re-connexion de l’usager, si Publik estime que ce dernier ne s’est pas connecté récemment. L’usager est alors redirigé vers la mire de login, sur laquelle il peut saisir son numéro de téléphone comme identifiant et son mot de passe.
Récupération de compte en cas de mot de passe oublié
Lorsque l’authentification par numéro de téléphone est activée, le formulaire de récupération de compte se voit doté d’un second champ, outre le courriel, pour préciser le numéro de téléphone (et son préfixe international) de l’usager.
Si Publik connaît un usager identifié par le numéro de téléphone saisi, un code SMS lui est envoyé de façon similaire à la création de compte (voir supra). L’usager saisi le code reçu dans un formulaire prévu à cet effet, et, si le code est correctement saisi, l’usager peut alors définir un nouveau mot de passe, et ainsi récupérer l’accès à son compte.
Changement de numéro de téléphone
Comme pour l’adresse courriel, l’usager peut souhaiter changer de numéro de téléphone connu dans son compte utilisateur Publik. La déclaration d’un nouveau numéro de téléphone est accompagnée de sa vérification, par l’envoi d’un code SMS de façon similaire à la création de compte.
Vérification d’un numéro existant
Le paramétrage, sur une instance Publik pré-existante, de l’authentification par numéro de téléphone peut très bien se faire sur une base de numéro déjà existants pour les comptes utilisateurs. Dans ce cas particulier, certains utilisateurs peuvent au préalable posséder un numéro de téléphone à valeur déclarative seule. Pour bénéficier des fonctionnalités complètes autour de l’authentification par numéro de téléphone, ces usagers sont invités à vérifier leur numéro de téléphone. Cette vérification se fait aussi … par l’envoi d’un code par SMS ! La saisie correcte du code par l’usager mène à la vérification du numéro de téléphone l’usager.
Suppression de compte
La suppression de compte est une action irréversible, il requière de s’assurer de la bonne détention de l’identifiant de compte par l’usager connecté. Dans le cas où cet identifiant est le numéro de téléphone de l’usager, cette vérification est aussi opérée par l’envoi d’un code SMS. La saisie correcte du code reçu par l’usager mène à une page de confirmation, actant la suppression du compte de l’usager et de ses données de profil liées.
Paramétrage avancé via les settings Django
Quatre settings Django additionnels permettent d’affiner davantage les modalités d’authentification par numéro de téléphone. Ils sont les suivants :
- PHONE_COUNTRY_CODES : Préfixes internationaux supportés (par défaut, la Belgique et la France — métropole et départements et territoires d’outre-mer),
- DEFAULT_COUNTRY_CODE : Celui des préfixes qui est utilisé par défaut pour la résolution et composition des numéros locaux (par défaut le “33” — France métropolitaine),
- La longueur des codes SMS envoyés (8 caractères par défaut),
- L’ensemble des caractères contenus dans les codes (lettres majuscules et chiffres par défaut, à l’exception des caractères amibigus (“I”, “L” et “1”, et “0” et “O”).
Par ailleurs, la fréquence de ratelimiting sur l’envoi de SMS par Publik est configurable selon les deux settings Django suivants :
- A2_SMS_NUMBER_RATELIMIT : Fréquence maximale d’envoi de SMS vers un numéro donné (par défaut, 10 SMS par heure maximum, au delà desquels l’envoi est bloqué),
- A2_SMS_IP_RATELIMIT : Fréquence maximale d’envoi de SMS déclenchée depuis la même adresse IP (par défaut, 10 SMS par heure aussi).