Autorización y autenticación en Swift (iOS/macOS): guía completa

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

Autorización y autenticación en Swift (iOS/macOS)



La autorización y la autenticación son componentes clave de cualquier aplicación moderna. En el ecosistema de Apple (iOS/macOS), los desarrolladores tienen acceso a potentes frameworks y bibliotecas que simplifican estos procesos. En este artículo, exploraremos los enfoques principales, las bibliotecas populares y proporcionaremos ejemplos prácticos en Swift.



Conceptos básicos



Antes de pasar al código, es importante distinguir dos términos:

  • Autenticación — verificación de la identidad del usuario (por ejemplo, usuario + contraseña, Face ID, Touch ID).
  • Autorización — determinación de los derechos de acceso después de la autenticación (por ejemplo, si el usuario puede ver ciertos datos).


Capacidades integradas de Apple



1. LocalAuthentication (Face ID / Touch ID)

El framework LocalAuthentication permite utilizar los datos biométricos del dispositivo para la autenticación.



import LocalAuthentication

func authenticateWithBiometrics() { let context = LAContext() var error: NSError? // Verificamos si la biometría está disponible guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { print("Biometría no disponible: \\(error?.localizedDescription ?? "error")") return } // Solicitamos autenticación context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Inicie sesión para acceder a la aplicación") { success, authError in DispatchQueue.main.async { if success { print("Autenticación exitosa") } else { print("Error: \\(authError?.localizedDescription ?? "error desconocido")") } } }}


2. Keychain Services

Keychain es un almacenamiento seguro para contraseñas y tokens. Úselo para almacenar credenciales después de la autenticación.



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 ] // Eliminamos datos antiguos si existen SecItemDelete(query as CFDictionary) // Agregamos nuevos let status = SecItemAdd(query as CFDictionary, nil) if status == errSecSuccess { print("Datos guardados en Keychain") } else { print("Error al guardar: \\(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)}


Bibliotecas populares para autorización



1. Firebase Authentication

Firebase proporciona una solución lista para autenticación mediante email/contraseña, Google, Apple, Facebook y otros proveedores.



import FirebaseAuth

func signInWithEmail(email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { result, error in if let error = error { print("Error al iniciar sesión: \\(error.localizedDescription)") return } print("Usuario inició sesión: \\(result?.user.uid ?? "ninguno")") }

Recommendations