Cliente OAuth para Swift (iOS/macOS): biblioteca OAuthSwift
OAuthSwift é uma biblioteca poderosa e flexível para implementar os protocolos OAuth 1.0 e OAuth 2.0 em aplicativos Swift para iOS, macOS, watchOS e tvOS. Ela fornece aos desenvolvedores uma interface simples e intuitiva para integrar serviços de terceiros (Google, GitHub, Facebook, Twitter e outros) sem a necessidade de processar manualmente requisições HTTP complexas, redirecionamentos e troca de tokens. A biblioteca é totalmente escrita em Swift, suporta versões modernas da linguagem (Swift 5+) e é ativamente mantida pela comunidade.
A principal vantagem do OAuthSwift é a minimização do código boilerplate. O desenvolvedor precisa apenas informar o identificador do cliente (client ID), a chave secreta (client secret), as URLs de autorização e redirecionamento, e a biblioteca gerencia todo o processo de obtenção do access token. OAuthSwift suporta todos os grants comuns do OAuth 2.0: Authorization Code, Implicit, Client Credentials e Resource Owner Password Credentials. Para OAuth 1.0, há suporte completo aos métodos de assinatura HMAC-SHA1, RSA-SHA1 e Plaintext.
Instalação e configuração
A biblioteca é distribuída via Swift Package Manager (SPM), CocoaPods e Carthage. O método recomendado é o SPM:
// No Xcode: File → Swift Packages → Add Package Dependency// URL: https://github.com/OAuthSwift/OAuthSwift.git// Versão: 2.2.0 ou superiorImportação no código:
import OAuthSwiftImplementação básica do OAuth 2.0 (exemplo com Google)
Vamos considerar um exemplo completo de autorização via Google usando o Authorization Code Flow. Primeiro, é necessário criar um projeto no Google Cloud Console, obter o client ID e configurar a redirect URI (por exemplo, com.example.app:/oauth-callback).
class GoogleAuthManager { private var oauthSwift: OAuth2Swift?
func startGoogleAuth() { oauthSwift = OAuth2Swift( consumerKey: "YOUR_CLIENT_ID", consumerSecret: "YOUR_CLIENT_SECRET", authorizeUrl: "https://accounts.google.com/o/oauth2/auth", accessTokenUrl: "https://oauth2.googleapis.com/token", responseType: "code" )
// Configuração dos parâmetros da requisição let state = generateState(withLength: 20) let scope = "https://www.googleapis.com/auth/userinfo.profile"
// Iniciar autorização oauthSwift?.authorize( withCallbackURL: URL(string: "com.example.app:/oauth-callback")!, scope: scope, state: state, parameters: [:], headers: nil ) { result in switch result { case .success(let (credential, response, parameters)): print("Access Token: \\(credential.oauthToken)") print("Refresh Token: \\(credential.oauthRefreshToken)") self.fetchUserInfo(credential: credential) case .failure(let error): print("Erro de autorização: \\(error.localizedDescription)") } } }
private func fetchUserInfo(credential: OAuthSwiftCredential) { let url = "https://www.googleapis.com/oauth2/v2/userinfo" oauthSwift?.client.get(url, parameters: [:]) { result in switch result { case .success(let response): if let json = try? JSONSerialization.jsonObject(with: response.data) as? [String: Any] { print("Email: \\(json["email"] ?? "")") print("Name: \\(json["name"] ?? "")") } case .failure(let error): print("Erro ao obter dados: \\(error)") } } }}Tratamento da URL scheme (iOS)
Para o funcionamento correto da callback-URL, é necessário configurar o AppDelegate ou SceneDelegate:
// AppDelegate.swiftfunc applic Também na biblioteca
node-cron — Agendador de tarefas para Node.js
Serialização de objetos em Kotlin: bibliotecas e exemplos de código
Tokens JWT em Swift: Trabalhando com JSON Web Token no iOS/macOS
Filas de Tarefas em C# (.NET): System.Threading.Channels e TPL Dataflow