Autenticación y autorización en Swift: LocalAuthentication, Firebase Auth, Keychain

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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, &

Recommendations