Autorisation et authentification en Swift (iOS/macOS)
L'autorisation et l'authentification sont des composants clés de toute application moderne. Dans l'écosystème Apple (iOS/macOS), les développeurs ont accès à des frameworks et bibliothèques puissants qui simplifient ces processus. Dans cet article, nous examinerons les approches principales, les bibliothèques populaires et fournirons des exemples pratiques en Swift.
Concepts de base
Avant de passer au code, il est important de distinguer deux termes :
- Authentification — vérification de l'identité de l'utilisateur (par exemple, identifiant + mot de passe, Face ID, Touch ID).
- Autorisation — détermination des droits d'accès après l'authentification (par exemple, si l'utilisateur peut consulter certaines données).
Fonctionnalités intégrées d'Apple
1. LocalAuthentication (Face ID / Touch ID)
Le framework LocalAuthentication permet d'utiliser les données biométriques de l'appareil pour l'authentification.
import LocalAuthentication
func authenticateWithBiometrics() { let context = LAContext() var error: NSError? // Vérifie si la biométrie est disponible guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { print("Biométrie indisponible : \\(error?.localizedDescription ?? "erreur")") return } // Demande l'authentification context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Connectez-vous pour accéder à l'application") { success, authError in DispatchQueue.main.async { if success { print("Authentification réussie") } else { print("Erreur : \\(authError?.localizedDescription ?? "erreur inconnue")") } } }}2. Keychain Services
Keychain est un stockage sécurisé pour les mots de passe et les jetons. Utilisez-le pour stocker les identifiants après l'authentification.
import Security
func saveToKeychain(service: String, account: String, password: String) { guard let passwordData = password.data(using: .utf8) else { return } let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrService as String: service, kSecAttrAccount as String: account, kSecValueData as String: passwordData ] // Supprime les anciennes données si elles existent SecItemDelete(query as CFDictionary) // Ajoute les nouvelles let status = SecItemAdd(query as CFDictionary, nil) if status == errSecSuccess { print("Données sauvegardées dans Keychain") } else { print("Erreur de sauvegarde : \\(status)") }}
func readFromKeychain(service: String, account: String) -> String? { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrService as String: service, kSecAttrAccount as String: account, kSecReturnData as String: true, kSecMatchLimit as String: kSecMatchLimitOne ] var item: CFTypeRef? let status = SecItemCopyMatching(query as CFDictionary, &item) guard status == errSecSuccess, let data = item as? Data else { return nil } return String(data: data, encoding: .utf8)}Bibliothèques populaires pour l'autorisation
1. Firebase Authentication
Firebase fournit une solution prête à l'emploi pour l'authentification via email/mot de passe, Google, Apple, Facebook et d'autres fournisseurs.
import FirebaseAuth
func signInWithEmail(email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { result, error in if let error = error { print("Erreur de connexion : \\(error.localizedDescription)") return } print("Utilisateur connecté : \\(result?.user.uid ?? "aucun")") } Aussi dans la bibliothèque
Cryptographie en Go (Golang) : chiffrement et hachage
Géolocalisation et cartes en PHP : aperçu des bibliothèques et outils
Jackson pour Java : guide complet avec exemples
Travailler avec XML en Swift : analyse, création et traitement de données (iOS/macOS)
Travailler avec les images en Go (Golang) : image, draw, imaging, resize