Autorisierung und Authentifizierung in Swift (iOS/macOS)
Autorisierung und Authentifizierung sind Schlüsselkomponenten jeder modernen App. Im Apple-Ökosystem (iOS/macOS) haben Entwickler Zugriff auf leistungsstarke Frameworks und Bibliotheken, die diese Prozesse vereinfachen. In diesem Artikel betrachten wir die grundlegenden Ansätze, beliebte Bibliotheken und geben praktische Beispiele in Swift.
Grundlegende Konzepte
Bevor wir zum Code übergehen, ist es wichtig, zwei Begriffe zu unterscheiden:
- Authentifizierung — Überprüfung der Identität des Benutzers (z. B. Login + Passwort, Face ID, Touch ID).
- Autorisierung — Festlegung der Zugriffsrechte nach der Authentifizierung (z. B. ob der Benutzer bestimmte Daten anzeigen darf).
Integrierte Apple-Funktionen
1. LocalAuthentication (Face ID / Touch ID)
Das Framework LocalAuthentication ermöglicht die Nutzung biometrischer Daten des Geräts zur Authentifizierung.
import LocalAuthentication
func authenticateWithBiometrics() { let context = LAContext() var error: NSError? // Prüfen, ob Biometrie verfügbar ist guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { print("Biometrie nicht verfügbar: \\(error?.localizedDescription ?? "Fehler")") return } // Authentifizierung anfordern context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Melden Sie sich an, um auf die App zuzugreifen") { success, authError in DispatchQueue.main.async { if success { print("Authentifizierung erfolgreich") } else { print("Fehler: \\(authError?.localizedDescription ?? "unbekannter Fehler")") } } }}2. Keychain Services
Keychain ist ein sicherer Speicher für Passwörter und Token. Verwenden Sie es, um Anmeldedaten nach der Authentifizierung zu speichern.
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 ] // Alte Daten löschen, falls vorhanden SecItemDelete(query as CFDictionary) // Neue hinzufügen let status = SecItemAdd(query as CFDictionary, nil) if status == errSecSuccess { print("Daten in Keychain gespeichert") } else { print("Fehler beim Speichern: \\(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)}Beliebte Bibliotheken für die Autorisierung
1. Firebase Authentication
Firebase bietet eine fertige Lösung für die Authentifizierung per E-Mail/Passwort, Google, Apple, Facebook und andere Anbieter.
import FirebaseAuth
func signInWithEmail(email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { result, error in if let error = error { print("Anmeldefehler: \\(error.localizedDescription)") return } print("Benutzer angemeldet: \\(result?.user.uid ?? "keine")") } Auch in der Bibliothek
JSON-Verarbeitung in JavaScript (Node.js): Vollständiger Leitfaden
ts-pattern für TypeScript: Vollständige Anleitung mit Beispielen
Swift Data für Swift: Das komplette Tutorial mit Beispielen
OkHttp Java: Vollständiges Tutorial mit Code-Beispielen
Arbeit mit S3 und Cloud-Speichern in JavaScript (Node.js) — die Bibliothek @aws-sdk/client-s3