Autenticação e Autorização em Swift (iOS/macOS): visão geral de ferramentas e bibliotecas
No desenvolvimento moderno para iOS/macOS, segurança e controle de acesso são aspectos criticamente importantes. O Swift oferece tanto frameworks nativos para autenticação local quanto integração com serviços em nuvem. Neste artigo, vamos explorar as principais ferramentas e bibliotecas para implementar login, registro e verificação de permissões de usuário.
1. LocalAuthentication — Face ID / Touch ID / Apple Watch
O framework LocalAuthentication permite autenticar o usuário por biometria ou senha do dispositivo. Funciona no iOS e macOS.
Principais recursos:
- Verificação de disponibilidade de biometria (Face ID, Touch ID)
- Autenticação com contexto (LAContext)
- Uso do código do dispositivo como opção alternativa
Exemplo de código:
import LocalAuthentication
func authenticateUser(completion: @escaping (Bool, Error?) -> Void) { let context = LAContext() var error: NSError?
// Verifica se a biometria está disponível guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { completion(false, error) return }
// Inicia a autenticação context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Confirme sua identidade para acessar os dados") { success, authError in DispatchQueue.main.async { completion(success, authError) } }}2. Firebase Authentication — autenticação em nuvem
Firebase Auth é uma biblioteca poderosa que suporta login via email/senha, Google, Apple, GitHub e outros provedores. Ideal para aplicações com servidor.
Instalação via Swift Package Manager:
// Em Package.swift, adicione:// .package(url: "https://github.com/firebase/firebase-ios-sdk.git", from: "10.0.0")// target: "YourAppTarget", dependencies: ["FirebaseAuth"]Registro de novo usuário:
import FirebaseAuth
func signUp(email: String, password: String) { Auth.auth().createUser(withEmail: email, password: password) { authResult, error in if let error = error { print("Erro no registro: \\(error.localizedDescription)") return } print("Usuário registrado: \\(authResult?.user.uid ?? "")") }}Login de usuário existente:
func signIn(email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { authResult, error in if let error = error { print("Erro no login: \\(error.localizedDescription)") return } print("Login realizado: \\(authResult?.user.email ?? "")") }}3. Keychain Services — armazenamento seguro de tokens
Para salvar tokens JWT, senhas ou chaves, use o Keychain. Este é um mecanismo nativo do iOS/macOS.
Exemplo de salvamento e leitura:
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, & Também na biblioteca
Guia completo do Micrometer para Java com exemplos práticos
Cache em TypeScript: biblioteca node-cache
Processamento de Markdown em C# (.NET): bibliotecas e ferramentas
Autorização e Autenticação em C++: Bibliotecas, Exemplos e Implementação
Integração de métricas Prometheus em Java: biblioteca simpleclient