🔐 2.5 Authentification et gestion des utilisateurs

Module 335 – RĂ©aliser une application pour mobile

🎯 Objectif d'apprentissage

À la fin de ce chapitre, vous serez capables de :

  • Comprendre les principes de base de l'authentification (identitĂ©, session, tokens)
  • Identifier les diffĂ©rences entre authentification, autorisation et gestion des utilisateurs
  • Expliquer le fonctionnement des tokens JWT, des sessions, et du stockage sĂ©curisĂ©
  • ConnaĂźtre les solutions modernes adaptĂ©es au mobile (Supabase Auth, Firebase Auth, Auth0, etc.)
  • GĂ©rer la persistance de connexion dans un contexte mobile offline-first

đŸ€” 2.5.1 Introduction : pourquoi identifier ?

Dans une application mobile moderne, l’authentification permet de reconnaĂźtre un utilisateur et de lui offrir une expĂ©rience personnalisĂ©e.

Sans authentification, toutes les fonctionnalitĂ©s doivent ĂȘtre accessibles Ă  n’importe qui, sans distinction — ce qui est rarement souhaitĂ©.

2.5.1 Pourquoi identifier ?

Pour :

  • Afficher des donnĂ©es personnelles
    → messages, notes, favoris, historique

  • ProtĂ©ger certaines fonctionnalitĂ©s
    → commandes, paiement, configuration

  • Synchroniser les donnĂ©es entre plusieurs appareils (cloud)

  • AmĂ©liorer l’expĂ©rience utilisateur
    → retrouver profil, thĂšme, prĂ©fĂ©rences

👉 Sur mobile, un dĂ©fi supplĂ©mentaire :
l’utilisateur s’attend Ă  rester connectĂ©, mĂȘme si l’app est fermĂ©e plusieurs jours.

2.5.1 Authentification vs Autorisation

Ces notions sont souvent confondues :

  • Authentification
    = vĂ©rifier l’identitĂ© de l’utilisateur

    “Êtes-vous bien Thomas ?”

  • Autorisation
    = vĂ©rifier les droits d’accĂšs

    “Thomas peut-il modifier ce document ?”

2.5.1 Gestion des utilisateurs

La gestion des utilisateurs englobe :

  • crĂ©ation de compte
  • connexion / dĂ©connexion
  • changement de mot de passe
  • email de vĂ©rification
  • gestion des rĂŽles
  • suppression de comptes

💡 Exemple concret :
Une application de notes affiche uniquement les notes du compte connecté :
impossible d’accĂ©der Ă  celles d’un autre utilisateur.

🔑 2.5.2 Les mĂ©thodes d’authentification modernes

Les applications mobiles supportent plusieurs mĂ©thodes d’authentification.
Chaque méthode a ses usages, ses avantages et son niveau de sécurité.

2.5.2 ① Email + mot de passe

La méthode la plus courante.

Fonctionnement :

  1. L’utilisateur saisit email + mot de passe
  2. L’app envoie la requĂȘte de connexion au serveur
  3. Si les identifiants sont valides, le serveur renvoie un token de session
  4. L’app stocke ce token en local (Preferences / SecureStorage)

➕ Avantages : simple, trĂšs rĂ©pandu
➖ InconvĂ©nients : nĂ©cessite une bonne gestion des mots de passe (hash, politique de sĂ©curité )

2.5.2 ② Magic Link

Méthode moderne, utilisée par Slack, Notion, etc.

Fonctionnement :

  1. L’utilisateur saisit son email
  2. Il reçoit un email avec un lien unique
  3. Cliquer sur ce lien le connecte automatiquement

➕ Avantages : pas de mot de passe Ă  retenir, expĂ©rience fluide
➖ InconvĂ©nients : dĂ©pend entiĂšrement de l’email, moins adaptĂ© Ă  certains contextes “business”

2.5.2 ⑱ Social Login (OAuth)

Connexion via :

  • Google
  • Apple
  • Facebook
  • GitHub
  • 


➕ Avantages :

  • connexion ultra-rapide
  • sĂ©curitĂ© forte gĂ©rĂ©e par le fournisseur

➖ InconvĂ©nients :

  • dĂ©pendance Ă  un acteur externe
  • parfois rejetĂ© dans les environnements sensibles (Ă©coles, entreprises)

â„č Cas particulier iOS
Apple oblige parfois à proposer “Sign in with Apple” si d’autres logins sociaux sont inclus.

2.5.2 ④ BiomĂ©trie (Face ID / Touch ID)

Utilisée pour déverrouiller un compte déjà connecté.

Ce n’est pas une authentification cloud, mais un verrou local.

➕ Avantages : trùs rapide, fluide pour l’utilisateur
➖ InconvĂ©nients : doit ĂȘtre couplĂ© Ă  un compte dĂ©jĂ  connectĂ© (et Ă  une auth serveur classique)

2.5.2 â‘€ Sessions avec tokens (JWT)

La majoritĂ© des apps mobiles utilisent aujourd’hui des tokens JWT (JSON Web Token), reçus aprĂšs la connexion.

Authorization: Bearer <token>
  • Le token encode des informations (id utilisateur, expiration, etc.)
  • Il doit ĂȘtre stockĂ© localement et renvoyĂ© Ă  chaque requĂȘte
  • Un refresh token permet de prolonger la session de maniĂšre sĂ©curisĂ©e
    → demander un nouveau token d’accùs sans ressaisir les identifiants

â„č Cette approche est au cƓur de Supabase Auth, Firebase Auth, Auth0, etc.

đŸ›Ąïž 2.5.3 Stockage sĂ©curisĂ© des sessions

Une application mobile doit pouvoir mĂ©moriser la session d’un utilisateur mĂȘme lorsque l’app est fermĂ©e.

Ce stockage doit ĂȘtre :

  • persistant
  • sĂ©curisĂ©

2.5.3 OĂč stocker un token ?

Environnement Solution Sécurité
Ionic / Capacitor SecureStorage ou Preferences 🔐 ChiffrĂ© (SecureStorage)
Flutter flutter_secure_storage 🔐 ChiffrĂ©
Android natif Keystore 🔐 TrĂšs sĂ©curisĂ©
iOS natif Keychain 🔐 TrĂšs sĂ©curisĂ©

💬 Recommandation :
Toujours préférer un stockage sécurisé pour les tokens (access + refresh).

2.5.3 Bonnes pratiques – Sessions

  • Ne jamais stocker de mot de passe en clair
  • Utiliser un systĂšme de rotation (access token + refresh token)
  • VĂ©rifier l’expiration du token au lancement de l’app
  • Token invalide → redirection vers l’écran de connexion
  • Hors ligne → autoriser l’accĂšs aux donnĂ©es locales tant que la session reste valide

💡 Exemple concret :
Supabase gĂšre automatiquement la persistance de session,
mais l’app doit stocker les tokens pour pouvoir fonctionner hors ligne (au moins en lecture).

đŸ„ž 2.5.4 Solutions modernes d’authentification

La plupart des apps modernes ne recodent pas leur propre auth.
Elles utilisent des services spécialisés (BaaS ou Identity Providers).

2.5.4 Supabase Auth

  • EntiĂšrement open-source
  • BasĂ© sur PostgreSQL + JWT
  • Supporte : magic links, passwords, OAuth
  • Plugins officiels pour Capacitor, Flutter, React Native

  • Gestion automatique des :
    • sessions
    • tokens
    • expiration
  • Compatible offline (via stockage local)

📝 TrĂšs bon choix pĂ©dagogique et pro pour projets modernes.

2.5.4 Firebase Auth

  • ProposĂ© par Google
  • TrĂšs simple Ă  prendre en main
  • Supporte :
    • Social login
    • Email / mot de passe
    • Phone auth (OTP via SMS)
  • SDK mobile trĂšs solide
  • Gestion de base des utilisateurs (password reset, email verification
)

📝 Parfait pour un premier projet mobile.

2.5.4 Auth0 (niveau entreprise)

  • SpĂ©cialisĂ© en Identity & Access Management
  • TrĂšs complet :
    • SSO
    • OAuth2
    • permissions avancĂ©es
  • IdĂ©al pour des environnements professionnels complexes
  • IntĂ©gration plus lourde, mais trĂšs robuste

📝 Choix privilĂ©giĂ© dans les grandes entreprises.

2.5.4 Comparatif synthétique

Solution Simplicité Mode offline Coût Idéal pour
Supabase ⭐⭐⭐⭐ ⭐⭐⭐⭐ 💰💰 App moderne avec base SQL
Firebase ⭐⭐⭐⭐⭐ ⭐⭐ 💰 Premiers projets, apps simples
Auth0 ⭐⭐⭐ ⭐ 💰💰💰 Entreprises, SSO, projets pro

đŸ“Č 2.5.5 Authentification en mobile offline-first

Sur mobile, l’expĂ©rience dĂ©pend fortement de la qualitĂ© de la connexion.

Les coupures sont normales :

  • tunnels, ascenseur, trains
  • parkings, zones rurales
  • salles surchargĂ©es (ex. Aula du BannĂ© 😉)

2.5.5 Objectifs d’une bonne app mobile

Une bonne app doit :

  1. Continuer Ă  fonctionner hors ligne
  2. Maintenir la session le plus longtemps possible
  3. Se reconnecter automatiquement quand le réseau revient

2.5.5 Objectifs d’une bonne app mobile

Contraintes :

  • Session active mĂȘme si l’app est fermĂ©e plusieurs jours
  • Perte de rĂ©seau ≠ dĂ©connexion
  • DonnĂ©es locales toujours consultables
  • Token expirĂ© → tentative de refresh automatique

💡 Exemple concret :
Une app de notes doit rester utilisable offline, y compris pour consulter ou créer des notes, tant que la session locale est considérée comme valide.

đŸ’Ș 2.5.6 StratĂ©gies robustes pour l’auth mobile

Exemple de stratĂ©gie d’auth robuste pour une app mobile moderne :

2.5.6 Étape 1 – VĂ©rification de session au dĂ©marrage

🟩 1. VĂ©rification de session au dĂ©marrage

Au lancement de l’app :

  • l’app vĂ©rifie s’il existe un token valide en local
  • si oui → l’utilisateur reste connectĂ©
  • sinon → redirection vers l’écran de connexion

2.5.6 Étape 2 – Rafraüchissement automatique

🟧 2. Rafraüchissement automatique du token

Les tokens JWT expirent (ex. aprĂšs 1 heure).

Un refresh token permet de redemander un access token sans ressaisir le mot de passe.

Flux typique :

  1. L’app utilise le token → l’API rĂ©pond 401 Unauthorized
  2. L’app tente un refresh en arriùre-plan
  3. Si le refresh rĂ©ussit → nouvelle session transparente pour l’utilisateur
  4. Si le refresh Ă©choue → dĂ©connexion

2.5.6 Étape 3 – Stockage sĂ©curisĂ©

đŸŸ© 3. Stockage sĂ©curisĂ© du token

Les tokens doivent ĂȘtre stockĂ©s via :

  • Capacitor SecureStorage
  • iOS Keychain
  • Android Keystore
  • Flutter flutter_secure_storage

🔐 Ne jamais stocker un token dans localStorage cĂŽtĂ© web :
risque d’accùs via JavaScript (XSS).

2.5.6 Étapes 4 & 5 – Offline & dĂ©connexion

🟧 4. ContinuitĂ© hors ligne

Si l’utilisateur est hors ligne :

  • l’app doit continuer Ă  fonctionner sur les donnĂ©es locales (voir chapitre 2.4)
  • les actions sont mises en file d’attente
  • la synchronisation se fait quand le rĂ©seau revient

đŸŸ„ 5. DĂ©connexion “gracieuse”

Si un token expire et que le refresh échoue (ex. mot de passe changé ailleurs) :

  • nettoyage complet de la session stockĂ©e
  • redirection vers la page de connexion
  • message clair :

    “Votre session a expirĂ©, veuillez vous reconnecter.”

2.5.6 En résumé

📝 À retenir
Une application mobile doit maintenir une session :

  • stable
  • sĂ©curisĂ©e
  • rĂ©sistante aux interruptions rĂ©seau

Les BaaS modernes (Supabase, Firebase, etc.)
simplifient énormément cette logique.

đŸ§© 2.5.7 ActivitĂ©s pĂ©dagogiques

đŸ§Ș Exercice 1 – Comparer les mĂ©thodes de connexion

Objectif : comprendre les avantages / limites des différentes méthodes.

âžĄïž Comparez mot de passe, OAuth et Magic Link.
âžĄïž Classez-les selon :

  • sĂ©curitĂ©
  • rapiditĂ©
  • expĂ©rience utilisateur
  • facilitĂ© d’intĂ©gration

💬 Discussion : faut-il obliger les logins sociaux ?

2.5.7 ActivitĂ© – Stockage de session

đŸ—„ïž Exercice 2 – OĂč stocker le token ?

Trois scénarios :

  • Token stockĂ© dans Preferences
  • Token stockĂ© dans SecureStorage
  • Token stockĂ© dans une base SQLite

âžĄïž Classez ces solutions du moins sĂ©curisĂ© au plus sĂ©curisĂ© et justifiez.
âžĄïž Expliquez pourquoi certaines solutions ne conviennent pas pour des tokens sensibles.

2.5.7 ActivitĂ© – Workflow d’authentification

🔐 Exercice 3 – SchĂ©ma d’auth mobile

Réalisez un schéma complet du flux :

  1. L’utilisateur saisit email + mot de passe
  2. L’app envoie la requĂȘte Ă  un service Auth
  3. Le serveur renvoie un JWT + refresh token
  4. L’app stocke les tokens localement
  5. L’utilisateur accùde à l’app
  6. Lors d’un appel API → ajout du header
    Authorization: Bearer <token>
  7. Token expirĂ© → tentative de refresh
  8. Échec → dĂ©connexion propre

💬 Cet exercice prĂ©pare directement la section 2.6 (Supabase / Firebase).

🔗 2.5.8 RĂ©fĂ©rences et ressources

🔐 2.5 Authentification et gestion des utilisateurs

By tirtho

🔐 2.5 Authentification et gestion des utilisateurs

  • 76