Authentification : Fondamentaux
Focus sur l'authentification, un procédé essentiel pour restreindre l'accès d'une application ou API aux utilisateurs autorisés.
Qu’est-ce que l’authentification ?
En développement web, l’authentification est le processus de vérification de l’identité d’un utilisateur.
Ce processus repose sur la transmission d’identifiants (ou « credentials ») du client à un serveur web, visant à garantir que seules les personnes autorisées ont accès aux ressources ou aux fonctionnalités d’une application.
En sécurisant l’accès aux systèmes, elle prévient les accès frauduleux et contribue à garantir la confidentialité des données et la protection des utilisateurs.
Une implémentation robuste de l’authentification est cruciale pour maintenir la confiance des utilisateurs et la réputation d’une application.
Sur des applications web traditionnelles, l’authentification est la plupart du temps effectuée à l’aide de combinaisons d’identifiants login/mot de passe.
Pour lutter contre les attaques par force brute, il est important de créer un mot de passe sécurisé.
Le serveur compare les informations reçues avec celles stockées dans sa base de données.
- Si les données correspondent, l’utilisateur est authentifié
- Sinon, l’accès est refusé
Si les formulaires de connexion classiques tels que nous les connaissons reposent la plupart du temps sur la saisie d’un couple login/mot de passe, d’autres méthodes d’identification existent.
S’authentifier pour quoi ?
L’authentification s’avère essentielle pour restreindre l’accès à des sites/applications et aux API.
Sites et applications
Pour les sites et applications web, l’authentification est nécessaire pour restreindre l’accès aux zones protégées, telles que les espaces membres ou les pages d’administration.
API
L’authentification pour les API est essentielle pour contrôler l’accès aux ressources et aux fonctionnalités exposées.
Différentes méthodes d’identification
Les identifiants analysés lors de la phase d’authentification ne sont pas toujours des couples Nom d’utilisateur/Mot de passe, mais peuvent prendre d’autres formes.
Nom d’utilisateur/Mot de passe
Comme évoqué précédemment, la plupart des formulaires de connexion à l’espace membre d’un site web se font en saisissant un nom d’utilisateur/email et un mot de passe.
Ces sites fonctionnent avec une base de données d’utilisateurs.
Authentification par couple login/mot de passe
- Formulaire de connexion : L’utilisateur saisit son login ainsi que son mot de passe dans un formulaire.
- Requête HTTP : Ces informations sont transmises au serveur via la requête HTTP.
- Vérification du login : Le serveur recherche d’abord si un utilisateur avec ce nom d’utilisateur/email existe en BDD.
- Vérification du mot de passe : Si c’est le cas, il compare ensuite le mot de passe saisi une fois haché avec le mot de passe stocké en base de données.
- Autorisation : Le serveur vérifie que l’utilisateur soit bien autorisé à accéder à la ressource.
Mot de passe seul
Dans certains cas, par exemple pour accéder à une page web privée, il est demandé de saisir un mot de passe seul.
Ici, l’internaute n’est pas dans l’obligation de posséder un compte utilisateur sur la plateforme en question.
Authentification par mot de passe
- Formulaire de connexion : L’utilisateur saisit le mot de passe dans un formulaire.
- Requête HTTP : Le mot de passe est transmis au serveur via la requête HTTP.
- Vérification du mot de passe : Le serveur compare ensuite le mot de passe saisi une fois haché avec le mot de passe stocké en base de données.
- Autorisation : Le serveur vérifie que l’utilisateur soit bien autorisé à accéder à la ressource.
Fournisseur d’accès (Google, Facebook…)
L’authentification via un fournisseur d’accès tiers tel que Google ou encore Facebook est aujourd’hui très largement adoptée par les concepteurs de sites pour l’expérience d’authentification simplifiée qu’ils proposent.
Les fournisseurs d’accès permettent de limiter la création de comptes indépendants pour chaque site sur lequel un utilisateur souhaite s’inscrire en mutualisant les données des utilisateurs.
Authentification par fournisseur d'accès
- Popup de connexion : L’utilisateur se connecte à un fournisseur d’accès (comme Google ou Facebook) dans une fenêtre dédiée.
- Demande d’autorisation : Le serveur demande l’autorisation d’accès à certaines informations du compte de l’utilisateur.
- Transmission d’un jeton d’accès : Une fois l’accès autorisé par l’utilisateur, le fournisseur d’accès génère et renvoie un jeton d’accès au serveur.
- Récupération des données : Ce jeton d’accès peut être utilisé par le serveur pour récupérer au besoin, des informations spécifiques du compte de l’utilisateur, telles que le nom d’utilisateur, le mot de passe, la date de naissance, etc.
Clé API
Les clés API sont des identifiants uniques, générés aléatoirement, utilisés pour authentifier et autoriser l’accès à des services web ou des API (Application Programming Interfaces).
Exemple de clé API :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Avant d’utiliser une API, un développeur doit généralement s’inscrire sur le site du fournisseur de l’API et générer une clé API unique.
Les fournisseurs d’API peuvent mettre en place des restrictions sur l’utilisation des clés API, telles que des limites de taux (nombre de requêtes par unité de temps), des restrictions d’IP, ou des autorisations d’accès spécifiques à certaines fonctionnalités de l’API.
Les clés API offrent ainsi une méthode sécurisée et efficace pour contrôler l’accès aux services web et aux fonctionnalités des API, tout en permettant aux développeurs d’intégrer facilement des fonctionnalités tierces dans leurs applications et projets.
Authentification par clé API
- Requête HTTP : Le développeur inclut la clé API dans les requêtes HTTP envoyées au serveur de l’API. Cette clé est souvent transmise en tant que paramètre d’URL, dans l’en-tête ou dans le corps de la requête.
- Vérification : Le serveur de l’API recherche l’existence et la validité de cette clé en base de données.
- Autorisation : Le serveur vérifie que l’utilisateur soit bien autorisé à accéder à la ressource.
Donnée biométrique
Les données biométriques sont des mesures physiologiques ou comportementales uniques utilisées pour identifier et authentifier les individus.
Les données biométriques offrent un moyen efficace et sécurisé d’authentifier les individus dans divers contextes, tels que l’accès aux appareils mobiles ou à des installations sécurisées.
Les données biométriques peuvent inclure :
- Des empreintes digitales
- Des scans de l’iris
- Des modèles faciaux
- Des empreintes vocales
- Etc.
Ces données sont capturées à l’aide de dispositifs spécialisés tels que des scanners, des caméras ou des microphones et stockées de manière sécurisée, souvent sous forme chiffrée, dans des bases de données ou des systèmes de gestion des identités.
Leur adoption est croissante en ce qui concerne l’authentification à des systèmes d’exploitation mobiles tels que les smartphones ou encore l’IoT. En revanche, elle demeure plus discrète sur les systèmes d’authentification web « cross-platform » qui nécessitent l’usage d’une méthode générique ; les ordinateurs étant aujourd’hui peu optimisés pour les données biométriques.
Authentification par données biométriques
- Capture : Capture des données biométrique à l’aide d’un dispositif (scanner, microphone, caméra, etc.).
- Vérification : Des algorithmes de correspondance biométrique sont utilisés pour analyser et comparer les données biométriques. Ces algorithmes prennent en compte des facteurs tels que la précision, la robustesse et la tolérance aux variations pour garantir des résultats fiables.
- Autorisation : Le serveur vérifie que l’utilisateur soit bien autorisé à accéder à la ressource.
Lien magique
Les liens magiques (ou « Magic Link » en anglais) sont des liens spéciaux générés par un site web pour faciliter la connexion des utilisateurs sans nécessiter de mot de passe.
Ils peuvent être envoyés par e-mail ou SMS et permettent à l’utilisateur de se connecter automatiquement en cliquant dessus. C’est pratique pour éviter d’avoir à se souvenir d’un mot de passe ou à le saisir à chaque connexion.
Authentification par lien magique
- Formulaire : L’utilisateur entre son adresse email ou son numéro de téléphone dans un formulaire.
- Génération du lien magique : Le serveur génère un lien unique et crypté, souvent valable pour une durée limitée.
- Réception du lien magique : L’utilisateur reçoit le lien magique via un email/SMS, selon ce qui a été renseigné, et clique dessus pour accéder au site web.
- Vérification : Le serveur vérifie la validité du lien et connecte automatiquement l’utilisateur le cas échéant.
Bien que majoritaires, ces modes d’identification ne sont pas les seuls qui existent, on pourrait également citer l’authentification à double facteur, l’utilisation de certificats, etc.
Authentification VS autorisation
Il est important de distinguer les termes authentification et autorisation.
Authentification
L’authentification confirme l’identité de l’utilisateur.
Ce processus répond en quelques sortes à la question « Qui êtes-vous ? ».
Autorisation
L’autorisation détermine les actions spécifiques que cet utilisateur est autorisé à effectuer.
Ce processus répond en quelques sortes à la question « Qu’êtes-vous autorisé à faire ? ».
L’autorisation fait référence aux rôles que l’on peut attribuer aux utilisateurs d’un système afin d’en contrôler l’usage. Parmi les rôles les plus courants, on retrouve l’administrateur et l’utilisateur, mais chaque application est libre d’implémenter les rôles propres à sa logique métier (auteur, éditeur, abonné…).
Maintenir l’authentification
Lorsqu’un utilisateur se connecte à un site web, ses informations d’identification (comme son nom d’utilisateur et son mot de passe) sont vérifiées par le serveur. Si les informations sont correctes, son statut connecté sera mémorisé afin d’éviter de répéter le processus d’authentification à chaque nouvelle requête vers une ressource sécurisée.
Sans mémorisation de l’état connecté de l’utilisateur :
- 🐌 Il serait coûteux en termes de ressources
- ⚠️ Cela nécessiterait parfois de conserver des informations sensibles comme le mot de passe côté client
- 😩 Cela demanderait dans le cas contraire de ressaisir les informations à chaque nouvelle requête
Il devient alors essentiel de mettre en place un procédé permettant de maintenir temporairement un état authentifié pour de potentielles interactions ultérieures avec un serveur web.
Pour cela, on exploite les mécaniques de sessions ou encore des JWT (JSON Web Tokens).