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

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: resumen de herramientas y bibliotecas



En el desarrollo para iOS y macOS, la seguridad de los datos del usuario es la prioridad número uno. La autenticación (verificación de identidad) y la autorización (concesión de permisos de acceso) son componentes básicos de cualquier aplicación moderna. En este artículo, analizaremos las herramientas, bibliotecas y frameworks clave de Swift para implementar el inicio de sesión con Apple ID, servicios de terceros (Google, Facebook), así como el almacenamiento local de tokens.



El artículo está dirigido a desarrolladores familiarizados con los fundamentos de Swift y Xcode. Todos los ejemplos de código han sido probados en Swift 5.9+ y son compatibles con iOS 17+/macOS 14+.



1. AuthenticationServices: Apple Sign In



La autorización nativa a través de Apple ID es un requisito obligatorio de la App Store para aplicaciones que utilizan proveedores externos (Google, Facebook). El framework AuthenticationServices proporciona una API simple para implementar Sign in with Apple.



import AuthenticationServicesimport SwiftUI

struct SignInWithAppleView: View { var body: some View { SignInWithAppleButton( onRequest: { request in request.requestedScopes = [.fullName, .email] }, onCompletion: { result in switch result { case .success(let authResults): // Obtenemos el token del usuario guard let credential = authResults.credential as? ASAuthorizationAppleIDCredential, let tokenData = credential.identityToken, let token = String(data: tokenData, encoding: .utf8) else { return } print("Apple token: \\(token)") case .failure(let error): print("Error: \\(error.localizedDescription)") } } ) .signInWithAppleButtonStyle(.black) .frame(width: 280, height: 44) }}


Importante: Apple devuelve fullName y email solo en el primer inicio de sesión. Para autorizaciones posteriores, use userID de credential.user.



2. Firebase Authentication: autenticación multiproveedor



Firebase Auth es una solución multiplataforma para autorización a través de email, Google, Facebook, GitHub y otros proveedores. Incluye componentes de UI listos para usar e integración con Firestore.



Instalación a través de Swift Package Manager:

// Package.swift o mediante Xcode: File > Add Packages// URL: https://github.com/firebase/firebase-ios-sdk.git// Seleccione FirebaseAuth, FirebaseFirestore


Ejemplo de inicio de sesión con email/contraseña:

import FirebaseAuth

func signInWithEmail(email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { authResult, error in if let error = error { print("Auth error: \\(error.localizedDescription)") return } guard let user = authResult?.user else { return } print("User signed in: \\(user.uid)") }}

func createUser(email: String, password: String) { Auth.auth().createUser(withEmail: email, password: password) { authResult, error in // Manejo del registro }}


Para Google Sign-In, se utiliza adicionalmente el SDK GoogleSignIn. Firebase gestiona automáticamente las sesiones y la actualización de tokens.



3. Keychain Services: almacenamiento seguro de tokens



Almacenar tokens JWT o refresh tokens en UserDefaults es un grave error de seguridad. Use Keychain (almacenamiento cifrado de iOS/macOS).



Envoltorio para Keychain:

import Security

class KeychainManager { static func save(key: String, data: Data) { let query: [String: Any] = [ kSecClass as String: kSecClassGener

Recommendations