Cliente OAuth para Swift (iOS/macOS): biblioteca OAuthSwift
OAuthSwift es una biblioteca potente y flexible para implementar los protocolos OAuth 1.0 y OAuth 2.0 en aplicaciones Swift para iOS, macOS, watchOS y tvOS. Proporciona a los desarrolladores una interfaz simple e intuitiva para integrar servicios de terceros (Google, GitHub, Facebook, Twitter y otros) sin necesidad de manejar manualmente solicitudes HTTP complejas, redirecciones e intercambio de tokens. La biblioteca está completamente escrita en Swift, es compatible con las versiones modernas del lenguaje (Swift 5+) y cuenta con el apoyo activo de la comunidad.
La principal ventaja de OAuthSwift es la minimización del código repetitivo (boilerplate). El desarrollador solo necesita especificar el ID de cliente (client ID), la clave secreta (client secret), las URL de autorización y redirección, y la biblioteca gestiona por sí misma el proceso de obtención del token de acceso. OAuthSwift es compatible con todos los tipos de concesión comunes de OAuth 2.0: Authorization Code, Implicit, Client Credentials y Resource Owner Password Credentials. Para OAuth 1.0, se implementa soporte completo para los métodos de firma HMAC-SHA1, RSA-SHA1 y Plaintext.
Instalación y configuración
La biblioteca se distribuye a través de Swift Package Manager (SPM), CocoaPods y Carthage. El método recomendado es SPM:
// En Xcode: File → Swift Packages → Add Package Dependency// URL: https://github.com/OAuthSwift/OAuthSwift.git// Versión: desde 2.2.0 en adelanteImportación en el código:
import OAuthSwiftImplementación básica de OAuth 2.0 (ejemplo con Google)
Consideremos un ejemplo completo de autorización a través de Google utilizando el flujo Authorization Code. Previamente, es necesario crear un proyecto en Google Cloud Console, obtener un client ID y configurar una URI de redirección (por ejemplo, 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" )
// Configuración de los parámetros de la solicitud let state = generateState(withLength: 20) let scope = "https://www.googleapis.com/auth/userinfo.profile"
// Inicio de la autorización 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("Error de autorización: \\(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("Error al obtener datos: \\(error)") } } }}Manejo del esquema de URL (iOS)
Para el correcto funcionamiento de la URL de callback, es necesario configurar AppDelegate o SceneDelegate:
// AppDelegate.swiftfunc applic También en la biblioteca
Trabajo con archivos ZIP en Go: guía completa del paquete archive/zip
Protocol Buffers Java: guía completa con ejemplos prácticos
Trabajo con YAML en Java: bibliotecas SnakeYAML y Jackson
Parseo de HTML en Node.js: TOP bibliotecas y ejemplos de código
Guía completa de Ehcache para Java: ejemplos y uso