عميل OAuth لـ Swift (iOS/macOS): مكتبة OAuthSwift

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل OAuth لـ Swift (iOS/macOS): مكتبة OAuthSwift



OAuthSwift هي مكتبة قوية ومرنة لتنفيذ بروتوكول OAuth 1.0 و OAuth 2.0 في تطبيقات Swift لأنظمة iOS و macOS و watchOS و tvOS. توفر للمطورين واجهة بسيطة وبديهية لدمج الخدمات الخارجية (Google و GitHub و Facebook و Twitter وغيرها) دون الحاجة إلى معالجة يدوية لطلبات HTTP المعقدة وعمليات إعادة التوجيه وتبادل الرموز. المكتبة مكتوبة بالكامل بلغة Swift، وتدعم الإصدارات الحديثة من اللغة (Swift 5+) ويتم صيانتها بنشاط من قبل المجتمع.



الميزة الرئيسية لـ OAuthSwift هي تقليل كود التكرار (boilerplate). يحتاج المطور فقط إلى تحديد معرف العميل (client ID) والمفتاح السري (client secret) وعناوين URL للتفويض وإعادة التوجيه، وتقوم المكتبة بإدارة عملية الحصول على رمز الوصول (access token) بنفسها. تدعم OAuthSwift جميع منح OAuth 2.0 الشائعة: رمز التفويض (Authorization Code) والضمني (Implicit) وبيانات اعتماد العميل (Client Credentials) وبيانات اعتماد كلمة مرور مالك المورد (Resource Owner Password Credentials). بالنسبة لـ OAuth 1.0، يتم دعم طرق التوقيع HMAC-SHA1 و RSA-SHA1 و Plaintext بشكل كامل.



التثبيت والإعداد

يتم توزيع المكتبة عبر Swift Package Manager (SPM) و CocoaPods و Carthage. الطريقة الموصى بها هي SPM:

// في Xcode: File → Swift Packages → Add Package Dependency// الرابط: https://github.com/OAuthSwift/OAuthSwift.git// الإصدار: من 2.2.0 فما فوق

الاستيراد في الكود:

import OAuthSwift


التنفيذ الأساسي لـ OAuth 2.0 (مثال على Google)

لننظر إلى مثال كامل للتفويض عبر Google باستخدام تدفق رمز التفويض (Authorization Code Flow). مسبقاً، يجب إنشاء مشروع في Google Cloud Console، والحصول على client ID، وإعداد redirect URI (مثل 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" )

// إعداد معاملات الطلب let state = generateState(withLength: 20) let scope = "https://www.googleapis.com/auth/userinfo.profile"

// بدء التفويض 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.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)") } } }}


معالجة مخطط URL (iOS)

لكي يعمل callback-URL بشكل صحيح، يجب إعداد AppDelegate أو SceneDelegate:

// AppDelegate.swiftfunc applic                    

توصيات