Fiche 07.05 — Auth REST propriétaire : login, token, refresh, logout
Objectif
Comprendre comment fonctionne une authentification propriétaire via API REST côté app iOS : login, register, access token, refresh token, stockage Keychain, refresh et logout.
1. Firebase Auth vs auth propriétaire
Avec Firebase Auth, tu utilises le SDK Firebase.
Avec une API propriétaire, ton app parle au backend avec HTTP :
Donc tu utilises URLSession ou Alamofire.
2. Access token et refresh token
L’access token expire vite. Le refresh token dure souvent plus longtemps.
Les tokens ne doivent pas être stockés dans UserDefaults ou AppStorage. On utilise Keychain.
3. Modèles
4. AuthService
Implémentation simplifiée :
⚠️ Piège classique : faire try await apiClient.request(...) as EmptyResponse sur un 204 No Content lève une erreur de décodage, parce que JSONDecoder ne peut pas décoder un corps vide. Pour les endpoints sans réponse, l’APIClient a besoin d’une méthode qui n’essaie pas de décoder :
L’exemple montre surtout le flux. En pratique, l’API exacte dépend du backend.
5. AuthState global
L’app doit savoir si l’utilisateur est connecté.
6. Redirection dans AppRootView
Le root décide quel flow afficher. Côté écrans enfants, on lit l’objet avec @Environment(AuthState.self) private var authState (voir fiche 02.11 sur @Observable).
7. Refresh token en principe
Quand une requête renvoie 401 Unauthorized :
Tu n’as pas besoin de connaître toutes les variantes, mais il faut comprendre cette logique.
⚠️ Piège réel : si plusieurs requêtes échouent en 401 en même temps, elles vont toutes déclencher un refresh en parallèle → double refresh, tokens invalidés mutuellement. En production on sérialise le refresh (un seul à la fois, les autres attendent son résultat) — c’est le pattern « single-flight », souvent implémenté avec un actor. (Couvert en détail dans la partie réseau de production.)
8. Discours entretien
Tu peux dire :
“J’ai surtout utilisé Firebase Auth. Pour une auth propriétaire, côté iOS le principe est clair : appels REST via URLSession ou Alamofire, récupération des tokens, stockage Keychain, AuthState global, refresh token et logout propre.”
Résumé
- Une auth propriétaire passe par une API REST.
- L’app reçoit souvent un access token et un refresh token.
- Les tokens doivent être stockés dans Keychain.
- L’access token sert aux requêtes privées.
- Le refresh token permet de renouveler la session.
AuthStatepermet de piloter login/app principale/logout.