Autenticación y autorización en Swift (iOS/macOS): resumen de herramientas y bibliotecas
En el desarrollo moderno de iOS/macOS, la seguridad y la gestión de acceso son aspectos críticamente importantes. Swift proporciona tanto frameworks integrados para autenticación local como integración con servicios en la nube. En este artículo, analizaremos las principales herramientas y bibliotecas para implementar inicio de sesión, registro y verificación de permisos de usuario.
1. LocalAuthentication — Face ID / Touch ID / Apple Watch
El framework LocalAuthentication permite autenticar al usuario mediante biometría o contraseña del dispositivo. Funciona en iOS y macOS.
Funcionalidades principales:
- Verificación de disponibilidad de biometría (Face ID, Touch ID)
- Autenticación con contexto (LAContext)
- Uso del código del dispositivo como opción de respaldo
Ejemplo de código:
import LocalAuthentication
func authenticateUser(completion: @escaping (Bool, Error?) -> Void) { let context = LAContext() var error: NSError?
// Verificamos si la biometría está disponible guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { completion(false, error) return }
// Iniciamos la autenticación context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Confirme su identidad para acceder a los datos") { success, authError in DispatchQueue.main.async { completion(success, authError) } }}2. Firebase Authentication — autenticación en la nube
Firebase Auth es una potente biblioteca que admite inicio de sesión mediante email/contraseña, Google, Apple, GitHub y otros proveedores. Ideal para aplicaciones con servidor.
Instalación mediante Swift Package Manager:
// En Package.swift agregue:// .package(url: "https://github.com/firebase/firebase-ios-sdk.git", from: "10.0.0")// target: "YourAppTarget", dependencies: ["FirebaseAuth"]Registro de nuevo usuario:
import FirebaseAuth
func signUp(email: String, password: String) { Auth.auth().createUser(withEmail: email, password: password) { authResult, error in if let error = error { print("Error de registro: \\(error.localizedDescription)") return } print("Usuario registrado: \\(authResult?.user.uid ?? "")") }}Inicio de sesión de usuario existente:
func signIn(email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { authResult, error in if let error = error { print("Error de inicio de sesión: \\(error.localizedDescription)") return } print("Inicio de sesión exitoso: \\(authResult?.user.email ?? "")") }}3. Keychain Services — almacenamiento seguro de tokens
Para guardar tokens JWT, contraseñas o claves, use Keychain. Es un mecanismo nativo de iOS/macOS.
Ejemplo de guardado y lectura:
import Security
func saveToKeychain(key: String, data: Data) -> Bool { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: key, kSecValueData as String: data ] SecItemDelete(query as CFDictionary) let status = SecItemAdd(query as CFDictionary, nil) return status == errSecSuccess}
func readFromKeychain(key: String) -> Data? { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: key, kSecReturnData as String: true, kSecMatchLimit as String: kSecMatchLimitOne ] var result: AnyObject? let status = SecItemCopyMatching(query as CFDictionary, & También en la biblioteca
Contenedor de Dependency Injection para Go (Golang) — wire, dig, fx
Generación de PDF en Go (Golang): bibliotecas y ejemplos
Pruebas en JavaScript (Node.js): frameworks y herramientas
Trabajo con fechas en Go (Golang): revisión de bibliotecas y paquetes
Caching en PHP: Redis, Memcached y APCu — guía completa