Cliente OAuth para Swift (iOS/macOS): guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca do cliente OAuth para Swift (iOS/macOS)

\n\n

OAuth (Open Authorization) é um protocolo de autorização aberto que permite que aplicativos obtenham acesso limitado aos recursos do usuário sem transmitir seu login e senha. No ecossistema Apple (iOS, macOS, watchOS, tvOS), a implementação do OAuth 2.0 é o padrão para integração com serviços como Google, Facebook, GitHub, Twitter e muitos outros. Para desenvolvedores Swift, existem várias bibliotecas testadas que simplificam o processo de autenticação e gerenciamento de tokens.

\n\n

Neste artigo, veremos uma das bibliotecas mais populares e flexíveis — OAuthSwift, e também discutiremos uma alternativa — AppAuth-iOS (recomendada pelo Google). Você aprenderá como conectar a biblioteca, realizar a autorização, obter o access token, refresh token e armazená-los com segurança.

\n\n

Principais recursos do OAuthSwift

\n\n
    \n
  • Suporte a OAuth 1.0 e OAuth 2.0
  • \n
  • Trabalho integrado com WebView (SFSafariViewController, WKWebView)
  • \n
  • Obtenção e atualização automática do access token
  • \n
  • Suporte a diferentes grants (Authorization Code, Implicit, Client Credentials, Resource Owner Password)
  • \n
  • Integração simples com Alamofire, URLSession e outros frameworks de rede
  • \n
  • Callbacks assíncronos (completion handlers) e suporte a Combine (através de extensões)
  • \n
  • Armazenamento seguro de tokens via Keychain
  • \n
\n\n

Instalação do OAuthSwift

\n\n

A biblioteca é instalada via Swift Package Manager (SPM) ou CocoaPods. Exemplo para SPM:

\n\n
// No Xcode: File → Add Packages...\n// URL: https://github.com/OAuthSwift/OAuthSwift.git\n// Versão: 2.2.0 ou superior
\n\n

Ou via Package.swift:

\n\n
dependencies: [\n    .package(url: "https://github.com/OAuthSwift/OAuthSwift.git", from: "2.2.0")\n]
\n\n

Exemplo de integração com OAuth 2.0 (Google)

\n\n

Vamos considerar um cenário típico — autorização via Google com obtenção do access token. Previamente, é necessário registrar o aplicativo no Google Cloud Console e obter o client_id e client_secret.

\n\n

Passo 1. Configuração do URL scheme

\n\n

No arquivo Info.plist, adicione o esquema para o callback:

\n\n
<key>CFBundleURLTypes</key>\n<array>\n    <dict>\n        <key>CFBundleURLSchemes</key>\n        <array>\n            <string>com.googleusercontent.apps.YOUR_CLIENT_ID</string>\n        </array>\n    </dict>\n</array>
\n\n

Passo 2. Código de autorização

\n\n
import OAuthSwift\n\nlet oauthswift = OAuth2Swift(\n    consumerKey:    "YOUR_CLIENT_ID",\n    consumerSecret: "YOUR_CLIENT_SECRET",\n    authorizeUrl:   "https://accounts.google.com/o/oauth2/auth",\n    accessTokenUrl: "https://oauth2.googleapis.com/token",\n    responseType:   "code"\n)\n\n// Salvamos a referência ao controlador para apresentar a WebView\nlet handler = SafariURLHandler(viewController: self, oauthSwift: oauthswift)\noauthswift.authorizeURLHandler = handler\n\nlet state = generateState(withLength: 20)\noauthswift.authorize(\n    withCallbackURL: URL(string: "com.googleusercontent.apps.YOUR_CLIENT_ID:/oauth2callback")!,\n    scope: "https://www.googleapis.com/auth/userinfo.email",\n    state: state,\n    parameters: [:]) { result in\n    switch result {\n    case .success(let (credential, response, parameters)):\n        print("Access Token: \\(credential.oauthToken)")\n        print("Refresh Token: \\(credential.oauthRefreshToken)")\n        // Salvamos os tokens no Keychain\n        KeychainWrapper.standard.set(credential.oauthToken, forKey: "access_token")\n        KeychainWrapper.standard.set(credential.oauthRefreshToken, forKey: "refresh_token")\n    case .failure(let error):\n        print("Erro de autorização: \\(error.localizedDescription)")\n                    

Recommendations